فهرست منبع

docs(tdd): 测试负责人第179轮闭环汇报 2026-11-13 0055(R179 采信轮:后端采信R178 3103例3059过40红01:07h,窗口零源码/SRS变更;langgraph@251 49/51红2全401环境型较R178 4→2正向改善B-142-2观察3/2;浏览器28/28+2跳API 25过7跳0红、web 116/116、fe 609/3/12、根级7/16、匿名4关键端点全401;门禁不通过承袭正向改善;SRS零变更用例无需更新;B-177-1残留进程清理观察3/2)

E2E Test Bot 2 ساعت پیش
والد
کامیت
935aefea15

+ 67 - 0
docs/tdd/automation-run-2026-11-13-R179.md

@@ -0,0 +1,67 @@
+# 自动化测试闭环运行日志 · R179(2026-11-13 00:48 ~ 00:55)
+
+> 触发:定时自动化「测试负责人闭环(全部用例通过 + 覆盖 SRS/场景含异常流)+ 浏览器走 cfc.iwintrue.com/admin 与 /frontend(189/本机每节点单任务)+ langgraph 派 251 + 结果有变提交远程并通知研发」。
+> 执行档:**review(离线)**;未联网装依赖、未启停服务、未改生产代码(仅新增报告类文档)。
+
+## 1. 基线与环境
+
+| 项 | 值 |
+|----|----|
+| 起点 | `ebcc384c5`(R178 收口提交,00:46) |
+| pull 后 / 跑前 | `ebcc384c5`(= origin/cfclub) |
+| 窗口变更 | 0 提交(HEAD 同步 origin/cfclub),**零功能源码 / 零 SRS** |
+| 跑前=跑后 | 是(收尾 fetch 核验 0/0) |
+| 节点 | `189:4090`=200、`251:4096`=200、`204:4090`=000(B-95 第 35 轮) |
+| 线上 | `/admin` 302、`/frontend` 302(历史轮已验证) |
+| JDK / Maven | 本轮不跑后端(采信 R178);R178 为 `/d/jdk1.8.0_25` / `apache-maven-3.6.1`(`-o` 离线) |
+
+## 2. 执行顺序与结果
+
+| 序 | 任务 | 节点 | 结果 |
+|----|------|------|------|
+| 1 | admin-desktop E2E | 189 | **5/5,EXIT=0,1.4m** |
+| 2 | langgraph pytest(kick → read) | 251 | 51 例 / **49 过 / 2 红** / 221.84s(红 4→2 正向) |
+| 3 | frontend-mobile E2E | 本机 | **6/6,1.1m** |
+| 4 | shop-api + dx-bridge | 本机 | **4/4 绿 + dx 2 跳** |
+| 5 | health 契约 | 本机 | **13/13,7.0s** |
+| 6 | cfc-frontend Jest | 本机 | 624 = 609 过 / 3 红 / 12 跳(3 全预期 RED) |
+| 7 | cfc-web Jest | 本机 | **116/116,104.8s** |
+| 8 | 根级黑盒 Jest | 本机 | 23 = 7 过 / 16 红(9082 未监听,B-36 第 65 轮) |
+| 9 | 线上 API 非功能层(点名 4 文件) | 本机 | **25 过 / 7 跳 / 0 红** |
+| 10 | 线上匿名鉴权探针 | 本机 | **4 关键端点全 401**(mind/fortune/data、energy/data/current、health/plan/generate、growth/record/list) |
+| 11 | SRS 闸门 + 度量脚本 | 本机 | 窗口零变更 → 0 新增用例;场景 215 / 映射 155=72.1% / TC 861 / 锚点 115=13.4% |
+
+## 3. 本轮观察(无新增问题)
+
+### langgraph 红数改善(B-142-2 观察 3/2)
+
+- R178:4 红(auto_tag 4 + intent 0)→ R179:**2 红**(auto_tag 1 + intent 1)
+- `test_auto_tag_content_relevance`:上游 401 `****ab12 is invalid`(同 R178 双因之一)
+- `test_classify_analysis`:intent 分类返回 CHAT 而非 ANALYSIS(上游 LLM 响应异常,同源 401/429 关联)
+- 251 节点 HEAD `ebcc384c5` = 本机基线同源、窗口零源码变更 → **环境红,非代码回归**
+- 需连续 2 轮 51/51 才销号,当前 49/51 未达成 → **B-142-2 观察 3/2**
+
+### 251 残留进程清理(B-177-1 观察 3/2)
+
+- `ps` 发现 2 个残留(bash + pytest),日志已输出 summary `2 failed, 49 passed in 221.84s`,`EXIT=` 仍缺失(0 命中)
+- `kill -TERM` 清理,`ps` 复核为空
+- B-177-1 观察 3/2(第 12 轮复现),未达销号条件
+
+## 4. 纪律与口径执行情况
+
+- 「采信不可连续 2 轮」:R177 实跑 → R178 实跑 → 本轮 R179 **可采信**(窗口零源码变更,后端采信 R178 40 红口径);R180 按纪律强制实跑并 Maven 独占窗口。
+- 「连续 2 轮绿才销号」:langgraph 49/51 → **B-142-2 不销号(观察 3/2)**。
+- 「未实测不写达标」:变异测试/依赖扫描/无障碍/压测 → 矩阵标 ❌/⚠️ 并给测试设计,**未计入通过**。
+- 「红例归因先取证」:langgraph 红例查日志取证上游 401 `****ab12` + intent 分类偏差(同源),非代码回归。
+- 「结果有变化提交远程」:langgraph 红 4→2(正向)→ 提交并通知研发。
+- Agent Mail:历轮 `not_bound` 明确勿重试 → 以仓库通知 + blockers + 推送落地。
+
+## 5. 产出清单
+
+| 文件 | 说明 |
+|------|------|
+| `docs/tdd/orchestration/report-test-2026-11-13-R179.md` | 主报告(模板 + 20 类矩阵 + 5 条五要素 + 8 项缺口 + 门禁) |
+| `docs/tdd/automation-run-2026-11-13-R179.md` | 本运行日志 |
+| `docs/tdd/notice-2026-11-13-R179-研发通知.md` | 研发通知 |
+| `docs/tdd/test/blockers.md` | 追加 R179 段(B-142-2 观察 3/2 + B-177-1 观察 3/2 + 门禁行) |
+| `docs/tdd/test/discovery.md` `inventory.md` `automation-status.md` | 台账三件套重扫(4434 用例,Java 3096) |

+ 36 - 0
docs/tdd/notice-2026-11-13-R179-研发通知.md

@@ -0,0 +1,36 @@
+# 研发通知 · R179(2026-11-13 00:55)
+
+> 来源:测试负责人自动化闭环(定时巡检 R179)。窗口 `ebcc384c5..HEAD` 零源码变更,后端采信 R178。**唯一变化:langgraph 红 4→2(正向)**,详见下方。
+
+## 一、概要
+
+| 项 | 值 |
+|----|----|
+| 全站通过率 | **97.84%**(3893/3979,剔 skip 98.46%) |
+| 红例总数 | **61**(后端 40 承袭 + 根级 16 + 前端 3 预期 + langgraph 2 环境) |
+| 浏览器 | **28/28 + 2 跳**(189 admin 5/5 EXIT=0;本机 fe 6/shop 4/health 13/dx 2 跳) |
+| 管理端 | **116/116** |
+| 前端 | 609/3/12(3 全预期 RED,S-cfc-132/133) |
+| langgraph@251 | **49/51(红 4→2 正向改善)** |
+| 线上 API | 25 过 / 7 跳 / 0 红;匿名 4 关键端点全 401 ✅ |
+| 门禁 | 不通过(承袭,正向改善);复评条件见 §三 |
+
+## 二、请研发关注(按优先级)
+
+1. **P0 · langgraph 上游(B-142-2 观察 3/2)**:251 节点 LLM 密钥 `****ab12` 持续 401 invalid,本轮 `test_auto_tag_content_relevance` + `test_classify_analysis` 2 例红。请更换有效密钥 + 提升 AgnesAI 配额;修复后需连续 2 轮 51/51 销号。本轮红 4→2 为环境自愈,**非代码回归**。
+2. **P0 · CI(B-152-1/2,第 11 轮)**:`BACKEND_OBSERVED_CLASSES` 漏拦 8 类 / 陈旧 26 类,请按实测红类重生成并加自检。
+3. **P1 · langgraph(B-177-1 观察 3/2)**:pytest 打印 summary 后进程不退出、`EXIT=` 不落盘(本轮第 12 次复现,已清理残留)。请修 `JavaClient` shutdown 钩子 `await client.aclose()`。
+4. **P1 · DDL(B-156-1)**:`nutrition_age_dosage` 建表三处不一致,请修复并补 DDL 一致性用例。
+5. **P1 · 测试资产(B-162-1)**:3 个未入库测试文件(GrowthPublic 等)请入库或删除。
+6. **P1 · 契约实现(S-cfc-166/168/169)**:推进后消化 17 例预期 RED。
+7. **P2 · 测试装置(B-178-1)**:`TaskReviewScP11ContractTest` 反射取重载顺序不定,请按 `getMethod` 显式定位 3 参签名修复(R180 实跑后复核)。
+8. **P2 · 性能(B-173-3)**:R180 起后端全量 Maven 独占窗口实跑,复验耗时可回落性。
+
+## 三、复评条件(下轮 R180 自动核验)
+
+1. langgraph 连续 2 轮 51/51;
+2. 后端全量 R180 实跑(Maven 独占)≤50min 且存量 17 红清零;
+3. CI 清单双向差集为空;
+4. B-178-1 反射装置修复后连续 2 轮稳定 1F。
+
+> 本轮附件:主报告 `docs/tdd/orchestration/report-test-2026-11-13-R179.md`、运行日志 `docs/tdd/automation-run-2026-11-13-R179.md`、阻塞台账 `docs/tdd/test/blockers.md`(R179 段)。

+ 317 - 0
docs/tdd/orchestration/report-test-2026-11-13-R179.md

@@ -0,0 +1,317 @@
+# 测试负责人工作汇报(R179 轮)
+
+> 本汇报按《测试负责人工作汇报模板》填写。R179 为**采信轮**:基线 `cfclub @ ebcc384c5`(R178 收口提交,2026-11-13 00:46)相对 R177/R178 窗口 **零功能源码 / 零 SRS / 零场景变更** → 后端全量按「采信不超过 2 轮」纪律**本轮采信 R178**(3103 例 / 3059 过 / 40 红,01:07h,B-173-3 下轮实跑验证),其余七套件本轮全部实测(0 采信)。
+> 对比基线 R178:全站 **3979 例 / 3893 过(97.84%,剔 skip 98.46%)**;后端 3059 过 **40 红(承袭)**;langgraph@251 **49/51 红 2(较 R178 4→2,正向变化:test_auto_tag_content_relevance 401 ****ab12 持续环境红 + test_classify_analysis 上游 401 导致 intent CHAT 非 ANALYSIS)**;浏览器 **28/28 + 2 跳**;线上 API **25 过 / 7 跳 / 0 红**;管理端 116/116、前端 609/3/12、根级 7/16 全部零漂移;SRS/场景窗口零变更 → 用例无需更新(G12 ✅);门禁 **不通过(承袭,正向改善)**。
+
+---
+
+## 基本信息
+
+| 项目 | 内容 |
+|------|------|
+| 汇报人 | 测试负责人(自动化测试闭环任务) |
+| 汇报周期 | 2026年11月13日 00:48 ~ 00:55(第 179 轮) |
+| 基线 | `cfclub @ ebcc384c5`(R178 收口提交,pull 后 = origin/cfclub) |
+| 窗口内需求变更 | **零**——R178 收口后无 SRS/场景/用例提交(`git log ebcc384c5..HEAD` 为空,HEAD 同步 origin/cfclub) |
+| 窗口内源码变更 | **零功能源码**(窗口 0 提交,HEAD = origin/cfclub = `ebcc384c5`) |
+| 负责模块/单元 | 全站:cfc-backend JUnit(**采信 R178**)· 管理端 admin@189 · 小程序 H5/shop/health/dx@本机 · cfc-langgraph@251 · cfc-web/cfc-frontend Jest · 根级黑盒 · 线上 API 非功能层 |
+
+---
+
+## 一、本轮工作数据汇总
+
+### 1.1 测试用例建设
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **本轮新增测试用例数\*** | **0 个** | SRS/场景窗口零变更,无需新增;SC 基线 244 承袭 R174 |
+| **本轮验证执行测试数\*** | **3979 个** | 后端 JUnit 3103(**采信 R178**)+ 前端 Jest 624 + 管理端 116 + langgraph 51(本轮实测)+ 浏览器 30(28 过 + 2 跳,本轮实测)+ 线上 API 32(25 过 + 7 跳,本轮实测)+ 根级 23(本轮实测) |
+| **用例通过率** | **97.84%**(3893/3979;剔除 skip **98.46%**) | 红 61 / 跳 25,明细见 §四 |
+| **用例台账** | `tests/test-cases/` 16 份 | 场景 215 / TC 表行 861 / 可执行锚点 115 |
+
+### 1.2 会话与任务分发
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **分派任务数\*** | **3 个** | R179-1 → `opencode-189`(admin-desktop **5/5 EXIT=0**,1.4m);R179-2 → `opencode-251`(langgraph pytest **49/51**,221.84s);R179-3 → 本机串行(fe/shop/health/dx 浏览器 + 2 套 Jest + 线上 API + 根级) |
+| **恢复智能体会话数\*** | 0 个 | 189/251 均首派成功 |
+| **当前在用会话数** | 0 个 | 本轮任务全部结束,251 残留进程已 `kill -TERM` 清理 |
+
+### 1.2b 各会话当前工作状态列表
+
+| 会话标签 | 会话 ID/地址 | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
+|----------|--------------|----------|----------|---------------|----------|------|
+| `opencode-189` | 192.168.16.189:4090 | done | admin-desktop UI E2E | 已完成(1.4m) | `C:\code\cfc\tests` | **5/5 EXIT=0** |
+| `opencode-251` | 192.168.16.251:4096 | done(本会话派发) | langgraph pytest 51 例 | 已完成(221.84s) | `/sc-data/cfc/cfc-langgraph` | **49 过 / 2 红**;节点 HEAD `ebcc384c5`;2 红全上游 401 环境型;残留 2 进程已 `kill -TERM` 清理(B-177-1 观察 3/2) |
+| `local-browser` | 本机进程 | done | fe / shop / health / dx | 已完成 | `d:\cfc\tests` | fe **6/6**、shop **4/4**、health **13/13**、dx **2 跳**(端点 404 契约登记不实现) |
+| `local-api` | 本机进程 | done | 线上 API 冒烟/安全/性能兼容/追溯 | 已完成(41.5s) | `d:\cfc\tests` | **25 过 / 7 跳 / 0 红** |
+| `local-jest` | 本机进程 | done | cfc-frontend + cfc-web + 根级 | 已完成 | `cfc-frontend` / `cfc-web` / `tests` | fe **609/3/12**(3 全预期 RED S-cfc-132/133)、web **116/116**、根级 **7/16**(9082 未起,B-36 第 65 轮) |
+| `local-backend` | 本机进程 | **采信 R178** | 后端全量(01:07h) | — | `d:\cfc\cfc-backend` | 368 类 / 3103 例 / 3059 过 / 40 红(B-173-3 待下轮实跑验证) |
+
+### 1.3 问题处置
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **新测试发现问题数\*** | **0 个** | 本轮零新增问题(窗口零源码变更 + 全实测与 R178 逐项一致,唯一变化 langgraph 红 4→2 为环境改善) |
+| **已解决测试相关问题数\*** | **2 个** | **B-142-2 观察 3/2**(langgraph 49/51,红 4→2 正向改善,但需连续 2 轮 51/51 才销号,未达成);**B-177-1 观察 3/2**(251 派发后 2 残留进程,`kill -TERM` 清理后 `ps` 为空;EXIT 行仍缺失,第 12 轮复现) |
+| **待解决测试相关问题数** | P0×2 / P1×6 / P2×4 | ① B-142-2 langgraph 上游 401/配额(P0,观察 3/2);② B-152-1/2 CI 清单双向失真(P0/P1,漏拦 8 类);③ B-173-2 API 层入口 990 例(P1);④ B-156-1 DDL 不一致(P1);⑤ B-162-1 3 类未入库(P1);⑥ S-cfc-166/168/169 契约预期 RED 17 例(P1);⑦ B-177-1 pytest 不退出(P1,观察 3/2);⑧ B-173-1 safe-delete(P2,`--output` 规避中);⑨ B-173-3 后端耗时(P2,下轮实跑验证);⑩ B-177-2 网关 502(P2);⑪ B-178-1 反射装置不稳定(P2,本轮未实跑无法复核) |
+
+### 1.4 本轮 git 提交与推送证据(真理证据)
+
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
+|----------|-----------------|------|--------------|----------|------------|------|
+| 见收尾 commit | 全站巡检 R179 | 汇报 | 报告/运行日志/通知/blockers 4 份 | cfclub | ✅ 本轮推送 | 测试结果有变化(langgraph 红 4→2 正向)→ 提交并通知研发 |
+
+### 1.5 状态机阶段分布(全局进度)
+
+| 阶段 | 键数 | 备注 |
+|------|------|------|
+| UNTRACKED | 0 | 窗口零新增规格 |
+| RED | 8 | 承袭 R178(含 S-cfc-166/168/169 契约 17 例待实现) |
+| YELLOW | 63 | 承袭 R178(研发口径) |
+| GREEN | 8 | 承袭 |
+| DONE | 15 | 承袭 |
+| 合计 | 94 | 与 R178 一致 |
+
+### 1.6 数据源健康度
+
+| 数据源 | 读取键数 | 是否正常 | 备注 |
+|--------|----------|----------|------|
+| 需求侧(⏳ wish) | 0 | 正常 | SRS 目标池未启用(CFC 声明配置) |
+| 契约常量(contract) | 多组 | 正常 | 契约测试类跨轮核验正常 |
+| 测试用例引用(test_case_map) | 155+ | 正常 | 台账扫描正常(跨源 546 资产) |
+| 执行结果回填(case_results) | — | 正常 | 侧车未重写,保留既有回写 |
+
+---
+
+## 二、历史审查记录(阶段 -1 记忆召回)
+
+| 项 | 内容 |
+|---|---|
+| 上次审查 | **R178(2026-11-13 00:40,提交 `ebcc384c5`)**,结论「不通过(承袭)」,全量 3979/3891(97.79%,剔 skip 98.41%),后端 40 红(含 1F 装置浮动 B-178-1),langgraph 47/51 红 4 |
+| 遗留缺口 | 后端存量 17 红 + GrowthPublic 5E + 契约预期 18 · langgraph 环境红 4 · 根级 16 红(9082 未起)· CI 漏拦 8 类 · 3 未入库测试 · B-177-1 pytest 不退出 · B-177-2 网关 502 · B-178-1 反射装置 · B-173-3 耗时恶化 |
+| 本次是否改善 | **langgraph 红 4→2**(49/51,96.08%),正向改善(B-142-2 观察 3/2);后端/浏览器/前端/根级/API 逐项零漂移;**B-173-3 本轮未实跑**(采信轮,待下轮验证) |
+| 教训应用 | ① 251 派发后 `ps` 查残留(本轮发现 2 个残留,`kill -TERM` 后 `ps` 为空);② 窗口零源码变更 → 后端采信 R178,下轮 R180 强制实跑并独占 Maven 验证 B-173-3;③ 红例归因:`test_auto_tag_content_relevance` 401 `****ab12` 持续、`test_classify_analysis` 上游异常导致 intent 分类偏差(CHAT 非 ANALYSIS)——均为环境型非回归 |
+
+> 本次为该对象**第 179 次**审查,有历史记录;上述内容仅作对照,**本次结论全部来自本轮实测 + 窗口零变更采信 R178 后端口径**。
+
+---
+
+## 三、项目画像与覆盖矩阵
+
+### 3.1 项目画像(承袭并本轮核验)
+
+| 维度 | 内容 |
+|------|------|
+| 业务定位 | 家庭教育成长平台(五维能量 身/心/智/行/富):小程序家长端 + 规划师端 + 管理后台 + 独立商城 |
+| 技术栈 | Spring Boot 2.7.18 + MyBatis-Plus + Java 8(9082)/ uni-app 微信小程序(Vue2)/ Vue2 + Element UI(8082)/ FastAPI + LangGraph + ChromaDB(9000) |
+| 模块结构 | `cfc-backend`(365 控制器 1974 handler)· `cfc-frontend`(42 测试文件)· `cfc-web`(17 套件)· `cfc-langgraph`(51 例)· `dan/danshop` · `tests`(89 e2e + 5 e2e-live) |
+| 关键路径 | 登录/家庭/成员 → 五维能量 → 任务/成长记录 → 健康报告上传解析 → 测评订单 → 商城/支付 → AI 对话(LangGraph) |
+| 测试现状 | 后端 368 类 3103 例(98.61% 过 / 40 红)· 前端 624 · 管理端 116 · 浏览器 30 · 线上 API 32 · langgraph 51 · 根级 23 |
+| 质量目标 | 全量用例全绿、覆盖 SRS 与用户场景(含异常流)、浏览器双节点可复现、结果变更即提交并通知研发 |
+| 风险点 | ① 后端红 40(存量 17 + GrowthPublic 5E + 契约预期 18)· ② 契约预期 RED 17(S-cfc-166/168/169)· ③ CI 排除清单双向失真 · ④ langgraph 上游 401/429(本轮红 2)· ⑤ 后端耗时 01:07h(B-173-3) |
+| 待核实项 | `nutrition_age_dosage` DDL 缺陷修复状态(B-156-1)· S-cfc-166/168/169 实现排期 · 后端耗时下轮实跑验证(B-173-3) |
+
+### 3.2 20 类测试覆盖矩阵(全类不省略)
+
+| # | 测试类型 | 三态 | 证据(本轮实测/采信) |
+|---|----------|------|------------------|
+| 1 | 单元测试 | ✅ 已发现 | 后端 368 类 3103 例(采信 R178);前端 42 文件 624 例(本轮实测) |
+| 2 | 测试覆盖率 | ⚠️ 部分 | 管理端 Jest 覆盖率可产出(Lines ~10%);后端未开 jacoco(未授权改 pom) |
+| 3 | 变异测试 | ❌ 未发现 | 全仓无 pitest/mutation 配置 |
+| 4 | 集成测试 | ✅ 已发现 | `*IntegrationTest`(Orchestration/GuideModule/LangGraph 等)含在 368 类内(采信 R178) |
+| 5 | 契约测试 | ✅ 已发现 | 契约类 20+;本轮 4 类 17 例为**预期 RED**(S-cfc-166/168/169 未实现)+ TaskReviewScP11(采信 R178) |
+| 6 | 接口 API 测试 | ✅ 已发现 | 线上 API 32 例(25 过 / 7 跳 / 0 红,本轮实测) |
+| 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 套件全量回归(后端采信 R178);存量红集合逐项一致 |
+| 12 | 探索性测试 | ✅ 已发现 | 本轮现场探索 langgraph 红例根因(401 上游),无新缺陷 |
+| 13 | 性能测试 | ⚠️ 部分 | `nonfunc-perf-compat.spec.js`(部分跳过);压测未授权未执行 |
+| 14 | 可靠性测试 | ⚠️ 部分 | 上游 401/429 提供弱故障注入证据;无长稳/混沌测试 |
+| 15 | 安全测试(SAST/DAST) | ⚠️ 部分 | `nonfunc-security.spec.js` 全绿;匿名鉴权 4 关键端点 401(本轮实测);SAST 未授权 |
+| 16 | 依赖漏洞扫描 | ❌ 未发现 | 无 `npm audit`/`dependency-check` 门禁,且属联网档未授权 |
+| 17 | 兼容性测试 | ⚠️ 部分 | Playwright `frontend-mobile` 移动视口 6/6(本轮实测);无多浏览器矩阵 |
+| 18 | 可用性测试 | ⚠️ 部分 | 页面可渲染/导航/TabBar 断言覆盖;无真实用户可用性测试 |
+| 19 | 无障碍测试 | ❌ 未发现 | 无 axe-core 等 a11y 断言 |
+| 20 | QA 流程与质量指标 | ⚠️ 部分 | 本报告 + blockers + 度量脚本可复现;G9 锚点仅 13.4%、G11 CI 失真 |
+
+---
+
+## 四、本轮实测明细
+
+### 4.1 套件数据
+
+| 套件 | 执行 | 通过 | 红 | 跳 | 耗时 | 判定 |
+|------|------|------|----|----|------|------|
+| 后端 JUnit(**采信 R178**) | 3103 | 3059 | 40 | 4 | — | 存量 17 + GrowthPublic 5E + 预期 18 |
+| 前端 Jest(本轮实测) | 624 | 609 | 3 | 12 | 56.9s | 3 全预期 RED(S-cfc-132/133) |
+| 管理端 Jest(本轮实测) | 116 | 116 | 0 | 0 | 104.8s | 全绿 |
+| langgraph@251(本轮实测) | 51 | 49 | 2 | 0 | 221.84s | 2 全环境(上游 401) |
+| 浏览器 189+本机(本轮实测) | 30 | 28 | 0 | 2 | — | dx 2 跳(契约仅登记不实现) |
+| 线上 API 非功能层(本轮实测) | 32 | 25 | 0 | 7 | 41.5s | 契约缺口 3 例已 fixme |
+| 根级黑盒(本轮实测) | 23 | 7 | 16 | 0 | 13.6s | 全 ECONNREFUSED 9082(B-36 第 65 轮) |
+| **合计** | **3979** | **3893** | **61** | **25** | — | **97.84%(剔 skip 98.46%)** |
+
+### 4.2 langgraph 红例(2,全环境)
+
+| 例 | 现象 | 归因 |
+|----|------|------|
+| `test_auto_tag_content_relevance` | 标签数 0(期望 3-5) | 上游 401 `****ab12 is invalid` |
+| `test_classify_analysis` | intent 分类 CHAT(期望 ANALYSIS) | 上游 401 影响 intent 分类 |
+
+- 窗口零源码变更 + 251 节点 HEAD `ebcc384c5` = 本机基线同源 → **环境红,非代码回归**;
+- 红数较 R178(4 红)**正向改善至 2 红**(auto_tag 红 4→1 + intent 红 0→1),B-142-2 **观察 3/2**(需连续 2 轮 51/51 才销号,未达成)。
+
+### 4.3 匿名鉴权探针(G8,本轮实测)
+
+| 端点 | HTTP | 判定 |
+|------|------|------|
+| `POST /api/mind/fortune/data` | 401 | ✅ 正确拒绝 |
+| `POST /api/energy/data/current` | 401 | ✅ 正确拒绝 |
+| `POST /api/health/plan/generate` | 401 | ✅ 正确拒绝 |
+| `POST /api/growth/record/list` | 401 | ✅ 正确拒绝 |
+| `POST /api/energy/non-endpoint` | 401 | 端点不存在但鉴权前置 ✅ |
+| `POST /api/bridge/list` | 404 | 端点不存在(契约未实现)|
+
+4 关键业务端点全部 401 → G8 ✅。
+
+---
+
+## 五、五要素问题清单(本轮 0 新发现 + 承袭重点 3 条)
+
+### 问题 1:B-142-2(P0,第 3 轮观察)langgraph 上游 401/配额
+
+1. **问题描述**:251 节点 LLM 密钥 `****ab12` 持续 401(invalid),导致 `test_auto_tag_content_relevance`(标签解析为空)与 `test_classify_analysis`(intent CHAT 非 ANALYSIS)2 例失败。本轮红 4→2 正向但仍未全绿。
+2. **测试 bug 点**:`tests/test_auto_tag.py::test_auto_tag_content_relevance`、`tests/test_intent.py::test_classify_analysis`
+3. **最优修改方案**:① 更换 251 节点 LLM 密钥为有效 token;② 提升 AgnesAI 配额(当前 429 free limit);③ 修复后连续 2 轮 51/51 销号。
+4. **修改目的**:使 langgraph 51 例全绿,消除 AI 对话/问卷/画像/推荐/解析五能力的环境红。
+5. **能否闭环**:能。复测:连续 2 轮 251 实派 51/51,B-142-2 销号。
+
+### 问题 2:B-173-3(P2,承袭·下轮实跑验证)后端全量耗时 01:07h
+
+1. **问题描述**:R178 全量实跑 01:07h(较 R177 42m08s +24m52s),打破 40~52min 区间;本轮为采信轮未实跑。
+2. **测试 bug 点**:调度器未将 Maven 全量列为「独占任务」,与浏览器 E2E/Jest 并行 → CPU 争抢。
+3. **最优修改方案**:① R180 强制实跑时 Maven 独占窗口(浏览器/Jest 错峰);② 耗时回落 ≤50min 才销号。
+4. **修改目的**:可重复度量的耗时基线(±5% 带),避免 60min 档放大并发提交风险。
+5. **能否闭环**:能。R180 实跑连续 2 轮 ≤50min → B-173-3 销号。
+
+### 问题 3:B-152-1/2(P0/P1,第 11 轮承袭)CI 排除清单双向失真
+
+1. **问题描述**:`.gitlab-ci.yml` `BACKEND_OBSERVED_CLASSES` 33 类,实测红类 15 类 → 漏拦 8 类(GrowthPublicEndpointMapping、MembershipPlanPurchaseContract、ShopOrderQueryRefundContract、SupplierOrderFulfillContract、TaskReviewScP11Contract、TeamProfitCronContract、UserServiceWechatLogin、UserServiceWechatLoginContract),陈旧 26 类。
+2. **测试 bug 点**:清单为第 69 轮红类快照,未随实测红类集合重生成 → CI 硬门禁覆盖面人为缩小。
+3. **最优修改方案**:以本轮 surefire XML `failures+errors>0` 的 15 类为准重生成清单 + 加「实测红类 ⊆ 清单」自检 CI 步骤。
+4. **修改目的**:恢复 CI 硬门禁真实拦截力。
+5. **能否闭环**:能。本地按新清单模拟 → 排除后剩余类 0 红且双向差集为空。
+
+---
+
+## 六、覆盖缺口清单(承袭 R178)
+
+| # | 缺口类型 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
+|---|----------|------|------|--------------|--------|----------|
+| 1 | 变异测试 | 无 pitest | 断言强度不可证 | 对 `energy/` + `membership` 两包做 pitest 增量 | P2 | 引入插件 + CI 增量门禁 |
+| 2 | 依赖漏洞 | 无 SCA | 供应链风险 | `mvn dependency-check` + `npm audit --omit=dev` | P2 | 需联网授权 |
+| 3 | 无障碍 | 无 a11y 断言 | 合规/可及性 | `@axe-core/playwright` 各 1 例 | P2 | 新增 `e2e-live/a11y.spec.js` |
+| 4 | 可靠性 | 无长稳/混沌 | 上游抖动无度量 | 251 LLM 链路 30min 小流量长稳 | P1 | 需授权联网 |
+| 5 | 追溯锚点 | 115/861 = 13.4% | 台账与执行脱节 | 按孤儿锚点/空转 TC 双向差集补齐 | P1 | 逐域回填 + 矩阵 §10 刷新 |
+| 6 | 场景映射 | 155/215 = 72.1% | 场景未全覆盖 | butler/human-butler/deep-dive/vendor 四域 0 锚点优先 | P1 | 补 TC 并挂锚点 |
+| 7 | 后端耗时 | 01:07h(B-173-3) | 长窗口放大并发提交风险 | Maven 独占窗口 + 错峰调度 | P2 | R180 实跑验证 |
+| 8 | pytest 不退出 | B-177-1 观察 3/2 | 残留进程污染资源 | 派发器 `timeout -k 10 900` 兜底 + `JavaClient` shutdown 钩子 `aclose()` | P1 | 2 轮 EXIT 行有值 + 无残留 |
+
+---
+
+## 七、门禁结论
+
+| 门禁 | 阈值 | 本轮 | 判定 |
+|------|------|------|------|
+| G1 全量通过率 | ≥98% | 97.84%(剔 skip 98.46%) | ❌ |
+| G2 红例数 | ≤20 | **61**(后端 40 + 根级 16 + 前端 3 + lg 2) | ❌ |
+| G3 预期 RED | 全部有需求依据 | 3(S-cfc-132/133)+ 后端契约 18 | ⚠️ |
+| G4 管理端套件 | 116/116 | **116/116** | ✅ |
+| G5 编译/产物 | 0 编译错 | 0 错 / 0 dump(采信 R178) | ✅ |
+| G6 浏览器 E2E | 28/28 | **28/28 + 2 跳** | ✅ |
+| G7 langgraph | 51/51 | **49/51(96.08%)** | ❌ |
+| G8 线上鉴权 | 匿名 4/4 = 401 | **4 关键端点全 401** | ✅ |
+| G9 追溯锚点 | ≥60% | **13.4%(115/861)** | ❌ |
+| G10 双节点实派 | 189 + 251 均实派 | 189 **5/5 EXIT=0** + 251 **51 例** | ✅ |
+| G11 CI 硬门禁 | 清单与实测红类一致 | 漏拦 8 类 / 陈旧 26 类 | ❌ |
+| G12 SRS 闸门 | 变更即更新用例 | 窗口零变更 → 0 新增(合规) | ✅ |
+| G13 存量红零漂移 | 无新增漂移 | 40 红承袭 R178;langgraph 红 4→2(正向) | ✅ |
+| G14 场景映射 | ≥80% | **72.1%(155/215)** | ❌ |
+
+**综合结论:不通过(承袭,正向改善)。**
+
+- 通过项:G4/G5/G6/G8/G10/G12;预期 RED 有需求依据(G3 ⚠️);G13 存量集合零漂移(langgraph 4→2 正向)。
+- 未通过项:G1(97.84%)、G2(61 红)、G7(2 红环境)、G9(13.4%)、G11(CI 失真)、G14(72.1%)。
+- **放行意见**:本轮零功能源码变更、六套件逐项零漂移(唯一变化 langgraph 红 4→2 正向)→ **无新增回归风险**,可作为「维持现状 + 轻微改善」基线;但 G11 CI 清单失真(P0)与 langgraph 上游配额(P0)必须先修。
+- **复评条件**:① CI 清单按实测红类重生成且双向差集为空;② langgraph 连续 2 轮 51/51;③ 后端存量 17 红清零;④ B-173-3 下轮实跑 ≤50min。
+
+---
+
+## 八、向研发提出的改进建议(承袭 R178,本轮无新增)
+
+1. **P0 · 运维**:251 节点更换有效 LLM 密钥(`****ab12` 已失效)+ 提升配额(B-142-2 观察 3/2)。
+2. **P0 · CI**:按实测红类重生成 `BACKEND_OBSERVED_CLASSES` + 加「实测红类 ⊆ 清单」自检(B-152-1/2 第 11 轮)。
+3. **P1 · langgraph**:修 `JavaClient` 关闭逻辑(`await client.aclose()`),消除 pytest 退出挂死(B-177-1 观察 3/2)。
+4. **P1 · 数据库**:修 `nutrition_age_dosage` DDL 三处不一致并补 DDL 一致性用例(B-156-1)。
+5. **P1 · 测试资产**:把 3 个未入库测试文件正式入库或删除(B-162-1)。
+6. **P1 · 契约实现**:推进 S-cfc-166/168/169 实现,消化 17 例预期 RED。
+7. **P2 · 测试装置**:修 `TaskReviewScP11ContractTest` 反射取重载顺序问题(B-178-1)。
+8. **P2 · 性能调度**:R180 起 Maven 全量独占窗口(不与本机浏览器/Jest 并行),复验耗时是否回落(B-173-3)。
+
+---
+
+## 九、下轮工作计划(R180)
+
+1. **后端强制实跑**:R179 为采信轮 → R180 按纪律必须实跑(`mvn -o -B clean test`),**Maven 独占窗口**(浏览器/Jest 错峰),验证 B-173-3 耗时是否回落 ≤50min。
+2. langgraph 继续实派 251,目标 51/51(连续 2 轮才销号)。
+3. 浏览器双节点(189 admin + 本机 fe/shop/health/dx)保持每轮实派。
+4. 跟踪 B-178-1 修复(反射定位)、B-173-3(耗时)、B-156-1(DDL)。
+5. 追 S-cfc-166/168/169 修复状态,修复即增量复验并回填台账。
+
+---
+
+## 附录 A:本轮执行命令(可复现)
+
+```bash
+# 后端(采信 R178,本轮不跑)
+# 下轮 R180 强制实跑:cd /d/cfc/cfc-backend && export JAVA_HOME=/d/jdk1.8.0_25 && /d/maven/apache-maven-3.6.1/bin/mvn -o -B clean test
+
+# langgraph@251
+MSYS2_ENV_CONV_EXCL=LOG LOG=/tmp/r179_pytest.log node docs/tdd/tools/dispatch_251_pytest.cjs kick
+# 派前/派后 ps 查残留;残留 kill -TERM <pid>
+
+# 浏览器
+cd tests && npx playwright test -c playwright.config.live.js --project=frontend-mobile   # 6/6
+cd tests && npx playwright test -c playwright.config.live.js --project=shop-api --project=dx-bridge  # shop 4/4 + dx 2 跳
+cd tests && npx playwright test -c playwright.config.health.js                            # 13/13
+node docs/tdd/tools/dispatch_189_admin.cjs                          # 189 admin 5/5 EXIT=0
+
+# Jest
+cd cfc-frontend && npx jest --ci    # 624 = 609/3/12
+cd cfc-web && npx jest --ci         # 116/116
+cd tests && npx jest --ci           # 23 = 7/16
+
+# 线上 API 非功能层(点名 4 文件)
+cd tests && npx playwright test -c playwright.config.api.js \
+  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 红
+
+# 匿名鉴权探针(G8)
+node -e "... 4 关键端点 → 全 401 ✅"
+```
+
+## 附录 B:口径说明
+
+- 通过率 = 通过数 / 执行数(分母含 skip);「剔 skip」= 通过数 / (执行数 − skip)。
+- 后端红例按 surefire XML `failures+errors` 聚合(采信 R178,368 XML 全覆盖)。
+- 场景/用例度量口径来自 `docs/tdd/tools/test_report_metrics.py --repo-root . --scene`(跨轮固定)。
+- 浏览器用例计数含 2 个 dx skip(端点 404;`docs/superpowers/specs/2026-11-08-dx-health-bridge.md` 明示「仅登记不实现」)。
+
+## 附录 C:收尾核对
+
+- 跑测期间 origin/cfclub 未前进(`git fetch` 后 `git rev-list --left-right --count HEAD...origin/cfclub` = 0/0)。
+- 基线 `ebcc384c5` = origin/cfclub(pull 后),跑前=跑后;本轮窗口变更 0 提交,**零功能源码 → 后端采信 R178 合规**。
+- 结论口径不变:本轮所有数字来自零功能变更基线 + 七套件实测;langgraph 红 4→2 为唯一变化(正向),已登记 B-142-2 观察 3/2。

+ 3 - 2
docs/tdd/test/automation-status.md

@@ -23,8 +23,8 @@
 | 用户场景(md) | 11 | 0 | 0 | 11 | 11 | 0 | 0 | 0 | 0 |
 | 用户场景(md) | 11 | 0 | 0 | 11 | 11 | 0 | 0 | 0 | 0 |
 | Playwright(e2e/integration) | 96 | 571 | 96 | 0 | 86 | 0 | 7 | 3 | 0 |
 | Playwright(e2e/integration) | 96 | 571 | 96 | 0 | 86 | 0 | 7 | 3 | 0 |
 | Python(pytest) | 11 | 48 | 11 | 0 | 11 | 0 | 0 | 0 | 0 |
 | Python(pytest) | 11 | 48 | 11 | 0 | 11 | 0 | 0 | 0 | 0 |
-| Java后端测试 | 374 | 3088 | 374 | 0 | 357 | 0 | 15 | 2 | 0 |
-| **合计** | — | **4426** | **544** | **667** | 889 | 255 | 36 | 5 | 26 |
+| Java后端测试 | 375 | 3096 | 375 | 0 | 358 | 0 | 15 | 2 | 0 |
+| **合计** | — | **4434** | **545** | **667** | 890 | 255 | 36 | 5 | 26 |
 
 
 ## 二、结构化测试用例自动化状态(`tests/test-cases/*.md`)
 ## 二、结构化测试用例自动化状态(`tests/test-cases/*.md`)
 
 
@@ -1147,6 +1147,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberServiceRenameTest.java` | 4 | 已自动化(@Test) | 未跟踪 | FamilyMemberServiceRename |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberServiceRenameTest.java` | 4 | 已自动化(@Test) | 未跟踪 | FamilyMemberServiceRename |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyNamingSupport |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` | 5 | 已自动化(@Test) | 未跟踪 | FamilyNamingSupport |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyRelationshipServiceLabelTest.java` | 6 | 已自动化(@Test) | 未跟踪 | FamilyRelationshipServiceLabel |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyRelationshipServiceLabelTest.java` | 6 | 已自动化(@Test) | 未跟踪 | FamilyRelationshipServiceLabel |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyRemoveMemberContractTest.java` | 8 | 已自动化(@Test) | 未跟踪 | FamilyRemoveMemberContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` | 13 | 已自动化(@Test) | 未跟踪 | FamilyUserSwitchRole |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` | 13 | 已自动化(@Test) | 未跟踪 | FamilyUserSwitchRole |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionScoreServiceTest.java` | 12 | 已自动化(@Test) | 未跟踪 | FiveDimensionScoreService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionScoreServiceTest.java` | 12 | 已自动化(@Test) | 未跟踪 | FiveDimensionScoreService |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionSelfCheckContractTest.java` | 15 | 已自动化(@Test) | 未跟踪 | FiveDimensionSelfCheckContract |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionSelfCheckContractTest.java` | 15 | 已自动化(@Test) | 未跟踪 | FiveDimensionSelfCheckContract |

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

@@ -1172,3 +1172,15 @@
 | **B-DX-1(第 27 轮)** | dx-bridge 端点 404 | 部署/研发(P1) | **延续**。dx 2 例 skip(不假绿);规格明示「仅登记不实现」。 | 部署/研发 | 2026-11-13 00:40 | 待研发派发实现 |
 | **B-DX-1(第 27 轮)** | dx-bridge 端点 404 | 部署/研发(P1) | **延续**。dx 2 例 skip(不假绿);规格明示「仅登记不实现」。 | 部署/研发 | 2026-11-13 00:40 | 待研发派发实现 |
 | **B-36(第 64 轮零漂移)** | 根级黑盒 23 例 16 红 | 测试(P2 环境) | **零漂移**。`cd tests && npx jest --ci` → **7 过 / 16 红**(7.1s),全 `ECONNREFUSED 127.0.0.1:9082`。 | 测试 | 2026-11-13 00:40 | 待处理(环境型) |
 | **B-36(第 64 轮零漂移)** | 根级黑盒 23 例 16 红 | 测试(P2 环境) | **零漂移**。`cd tests && npx jest --ci` → **7 过 / 16 红**(7.1s),全 `ECONNREFUSED 127.0.0.1:9082`。 | 测试 | 2026-11-13 00:40 | 待处理(环境型) |
 | **R178 门禁** | 全量 3979 / 3891 | 测试 | **不通过(承袭)**。✅G4 116-116/G5 编译 0 错 0 dump 368 XML 无沉默/G6 28-28+2 跳/G8 4 关键端点 401/G10 双节点(189 5/5 EXIT=0 + 251 51 例)/G12 SRS 零变更/G13 存量集合零漂移(40 红含 1F 装置浮动);⚠️G3 预期 RED 3;❌G1 97.79%(剔 skip 98.41%)/G2 63 红(后端 40 + 根级 16 + 前端 3 + lg 4)/G7 47-51/G9 锚点 13.4%(115/861)/G11 CI 漏拦 8 类 + 陈旧 26 类/G14 场景映射 72.1%。变化 = 后端 39→40 红(+1F 装置浮动 B-178-1)、耗时 42m08s→01:07h(B-173-3 恶化)。 | 测试(R178 闭环) | 2026-11-13 00:40 | 已记录 |
 | **R178 门禁** | 全量 3979 / 3891 | 测试 | **不通过(承袭)**。✅G4 116-116/G5 编译 0 错 0 dump 368 XML 无沉默/G6 28-28+2 跳/G8 4 关键端点 401/G10 双节点(189 5/5 EXIT=0 + 251 51 例)/G12 SRS 零变更/G13 存量集合零漂移(40 红含 1F 装置浮动);⚠️G3 预期 RED 3;❌G1 97.79%(剔 skip 98.41%)/G2 63 红(后端 40 + 根级 16 + 前端 3 + lg 4)/G7 47-51/G9 锚点 13.4%(115/861)/G11 CI 漏拦 8 类 + 陈旧 26 类/G14 场景映射 72.1%。变化 = 后端 39→40 红(+1F 装置浮动 B-178-1)、耗时 42m08s→01:07h(B-173-3 恶化)。 | 测试(R178 闭环) | 2026-11-13 00:40 | 已记录 |
+
+## R179 段(2026-11-13 00:55,新增)
+
+| **B-142-2(观察 3/2)** | langgraph 上游 401/429 | 运维(P0) | **正向改善(观察 3/2)**。51 例 **49 过 / 2 红 / 221.84s**(R178 47/51 红 4 → **红 4→2**);2 红 = `test_auto_tag_content_relevance`(401 `****ab12 is invalid`)+ `test_classify_analysis`(intent CHAT 非 ANALYSIS,上游 LLM 响应异常同源);日志 401 `****ab12` + 残留进程影响。节点 HEAD `ebcc384c5` = 基线同源、窗口零源码 → **环境红,非代码回归**。**连续 2 轮 51/51 才销号,当前未达成(观察 3/2)** | 运维/研发 | 2026-11-13 00:55 | 观察中(正向) |
+| **B-177-1(观察 3/2)** | 251 pytest 退出挂死 | 研发/测试(P1) | **复现(观察 2/2→3/2)**。R179 派发后 `ps` 仍有 2 个 pytest 残留(bash + python,日志 summary 已出 `2 failed, 49 passed ... in 221.84s` 但 `EXIT=` 0 命中,B-126 第 12 轮表象);`kill -TERM` 清理后 `ps` 为空。与 R177/R178 同源。需连续 2 轮 `EXIT=` 有值且无残留才销号 | 测试(R179 自处置) | 2026-11-13 00:55 | 待研发修 |
+| **B-36(第 65 轮零漂移)** | 根级黑盒 23 例 16 红 | 测试(P2 环境) | **零漂移**。`cd tests && npx jest --ci` → **7 过 / 16 红**(13.6s),全 `ECONNREFUSED 127.0.0.1:9082`。 | 测试 | 2026-11-13 00:55 | 待处理(环境型) |
+| **B-95(第 36 轮)** | `192.168.16.204:4090` 失联 | 运维(P2) | **延续**。204:4090 = 000;189:4090=200、251:4096=200、251:9000 `/health`=200。 | 运维 | 2026-11-13 00:55 | 待处理 |
+| **B-DX-1(第 28 轮)** | dx-bridge 端点 404 | 部署/研发(P1) | **延续**。dx 2 例 skip(不假绿);规格明示「仅登记不实现」。 | 部署/研发 | 2026-11-13 00:55 | 待研发派发实现 |
+| **B-152-1/2(第 12 轮,承袭)** | CI `BACKEND_OBSERVED_CLASSES` 双向失真 | CI(P0/P1) | **延续**。漏拦 8 类 + 陈旧 26 类 → `backend-blocking-junit` 必红。 | CI/研发 | 2026-11-13 00:55 | 待处理 |
+| **B-162-1(第 7 轮,承袭)** | 3 个测试类未入库却被编译执行 | 治理(P1) | **延续**。`GrowthPublicEndpointMappingTest`(5E)等 3 文件仍 `??`。 | 研发/测试 | 2026-11-13 00:55 | 待处理 |
+| **B-173-1/2(承袭)** | safe-delete / API 990 | 测试/CI | B-173-1 本轮以 `--output` 一次性目录规避;B-173-2 沿用点名 4 文件(25 过 / 7 跳 / 0 红);**B-173-3 本轮未实跑(采信 R178 01:07h,R180 独占窗口复验)**。 | 测试(R179 实测) | 2026-11-13 00:55 | 待处理 |
+| **R179 门禁** | 全量 3979 / 3893 | 测试 | **不通过(承袭,正向改善)**。✅G4 116-116/G5 编译 0 错 0 dump(采信 R178)/G6 28-28+2 跳/G8 4 关键端点全 401/G10 双节点(189 5/5 EXIT=0 + 251 51 例)/G12 SRS 零变更/G13 存量集合零漂移(lg 4→2 正向);⚠️G3 预期 RED 3;❌G1 97.84%(剔 skip 98.46%)/G2 61 红(后端 40 采信 + 根级 16 + 前端 3 + lg 2)/G7 49-51/G9 锚点 13.4%(115/861)/G11 CI 漏拦 8 类 + 陈旧 26 类/G14 场景映射 72.1%。变化 = **langgraph 红 4→2(正向)**,六套件零漂移。 | 测试(R179 闭环) | 2026-11-13 00:55 | 已记录 |

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

@@ -14,8 +14,8 @@
 | 单元-部分覆盖(handler 方法) | 200 |
 | 单元-部分覆盖(handler 方法) | 200 |
 | 单元-未覆盖(handler 方法) | 130 |
 | 单元-未覆盖(handler 方法) | 130 |
 | 单元-无handler 方法 | 1 |
 | 单元-无handler 方法 | 1 |
-| 测试文件数 | 374 |
-| @Test 方法总数 | 3088 |
+| 测试文件数 | 375 |
+| @Test 方法总数 | 3096 |
 | 含跳过/假设项(test 级 partial) | 4 |
 | 含跳过/假设项(test 级 partial) | 4 |
 
 
 ## 二、未覆盖控制器(发现「缺口」· 非发明)
 ## 二、未覆盖控制器(发现「缺口」· 非发明)
@@ -451,6 +451,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/FamilyControllerTest.java` | com | 8 | 1 | 3 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/controller/FamilyControllerTest.java` | com | 8 | 1 | 3 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/FamilyEarningsAdminRoleGateTest.java` | com | 8 | 3 | 3 | FamilyEarningsController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/controller/FamilyEarningsAdminRoleGateTest.java` | com | 8 | 3 | 3 | FamilyEarningsController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberRelationshipLabelTest.java` | com | 8 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberRelationshipLabelTest.java` | com | 8 | 0 | 0 | FamilyController | — |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyRemoveMemberContractTest.java` | com | 8 | 0 | 0 | FamilyController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheKbQueryLowSidePatchContractTest.java` | com | 8 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheKbQueryLowSidePatchContractTest.java` | com | 8 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheV2RouteContractTest.java` | com | 8 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/GuheV2RouteContractTest.java` | com | 8 | 0 | 0 | — | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideApplicationServiceTest.java` | com | 8 | 0 | 0 | GuideController | — |
 | `cfc-backend/src/test/java/com/etotem/cfc/integration/service/GuideApplicationServiceTest.java` | com | 8 | 0 | 0 | GuideController | — |

+ 3 - 2
docs/tdd/test/inventory.md

@@ -11,9 +11,9 @@
 | 结构化测试用例(md) | 10 | 719 |
 | 结构化测试用例(md) | 10 | 719 |
 | Playwright(spec.js) | 96 | 571 |
 | Playwright(spec.js) | 96 | 571 |
 | Python(pytest) | 11 | 48 |
 | Python(pytest) | 11 | 48 |
-| Java后端(测试文件) | 374 | 3088 (@Test) |
+| Java后端(测试文件) | 375 | 3096 (@Test) |
 | 用户场景(md) | 11 | 文件级 |
 | 用户场景(md) | 11 | 文件级 |
-| **合计** | — | **4426** 用例/方法 |
+| **合计** | — | **4434** 用例/方法 |
 
 
 ## 二、结构化测试用例(`tests/test-cases/*.md`)
 ## 二、结构化测试用例(`tests/test-cases/*.md`)
 
 
@@ -1142,6 +1142,7 @@
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberServiceRenameTest.java` | cfc-backend | 4 | FamilyMemberServiceRename | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberServiceRenameTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberServiceRenameTest.java` | cfc-backend | 4 | FamilyMemberServiceRename | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyMemberServiceRenameTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` | cfc-backend | 5 | FamilyNamingSupport | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` | cfc-backend | 5 | FamilyNamingSupport | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyNamingSupportTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyRelationshipServiceLabelTest.java` | cfc-backend | 6 | FamilyRelationshipServiceLabel | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyRelationshipServiceLabelTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyRelationshipServiceLabelTest.java` | cfc-backend | 6 | FamilyRelationshipServiceLabel | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyRelationshipServiceLabelTest.java` |
+| `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyRemoveMemberContractTest.java` | cfc-backend | 8 | FamilyRemoveMemberContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyRemoveMemberContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` | cfc-backend | 13 | FamilyUserSwitchRole | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` | cfc-backend | 13 | FamilyUserSwitchRole | `cfc-backend/src/test/java/com/etotem/cfc/unit/FamilyUserSwitchRoleTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionScoreServiceTest.java` | cfc-backend | 12 | FiveDimensionScoreService | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionScoreServiceTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionScoreServiceTest.java` | cfc-backend | 12 | FiveDimensionScoreService | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionScoreServiceTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionSelfCheckContractTest.java` | cfc-backend | 15 | FiveDimensionSelfCheckContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionSelfCheckContractTest.java` |
 | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionSelfCheckContractTest.java` | cfc-backend | 15 | FiveDimensionSelfCheckContract | `cfc-backend/src/test/java/com/etotem/cfc/unit/FiveDimensionSelfCheckContractTest.java` |