Explorar o código

docs(tdd): 测试负责人第186轮闭环汇报 2026-11-13 0808(同基线独立复核轮:六套件全部独立实跑:浏览器189+本机28过/2跳、fe jest 609/3/12、web 116/116、根级7/16(B-36第71轮)、线上API 25过/7跳/0红、langgraph@251 45/51红7→6改善(auto_tag用完配额自我恢复1例,intent 4例仍429/401环境红)、B-177-1本轮未复现观察+1;后端B-184-1结构性第3轮沿用R185同源码全量3111/3079/28+定向103例承袭零漂移第22次;全站3987例/3908过=98.02%环比+1过、G1由❌转✅;CI清单漏拦7陈旧26第18轮;SRS零变更用例零新增;台账刷新365控制器/1976handler/覆盖456、inventory 4434;已提交推送并通知研发)

E2E Test Bot hai 14 horas
pai
achega
c0e3028bf0

+ 71 - 0
docs/tdd/automation-run-2026-11-13-R186.md

@@ -0,0 +1,71 @@
+# [测试闭环·每小时] 2026-11-13 07:44 轮(R186,review 档,内网 E2E 已授权)
+
+> 测试负责人:陆谨(软件测试专家团主理人)|执行档:review(内网 cfc.iwintrue.com / 189 / 251 已授权;不访问外部公网;SRS 闸门本小时零变更故零编写)
+> HEAD=`3cd90d5cb`(=origin,07:44 fetch 核验;R185 兄弟批次 07:42 已推送完整证据);上次本对象记忆轮=R185(07:42);本轮与 R185 相邻,窗口零源码变更 → **同基线独立复核轮:六套件全部独立实跑 + 后端采「同源码沿用 R185 全量 + 定向承袭」双证**。
+
+---
+
+## 1. 阶段 -1 记忆召回
+
+- **非首次审查**:本对象已审 186 轮。最近链条 R184(3987/3913=98.14%,G1 ✅)→ **R185(07:42,3987/3907=97.99%,G1 回落 ❌)** → **R186(本轮)**。
+- **召回命中并本轮复查**:B-184-1(后端全量耗时劣化)→ **第 3 轮,结构性未修**(延续截断+沿用纪律);B-142-2(langgraph 上游)→ **本轮红 7→6 轻微改善**(auto_tag 1 例恢复,intent 4 例仍环境红);B-177-1(pytest 不退出)→ **本轮未复现**(观察轮 9/3);B-152-1/2(CI 双向失真)→ 漏拦 7 / 陈旧 26;B-156-1(DDL)→ 第 11 轮未修;B-170-1(迁移语法)→ 第 8 轮未修;S-cfc-176 幂等 → 1F 维持;B-178-1 → 2F 装置浮动维持。
+- **教训应用**:251 派发用 `/tmp/r186_pytest.log` POSIX 路径 + `MSYS_NO_PATHCONV=1` 防路径转换(R173 教训延续);251 派前查残留(本轮无残留)、派后核 `EXIT=` + `ps` 双判据(本轮无残留);每节点单浏览器任务严格串行(本机 fe→shop→health→dx);前端 jest 每轮实跑(B-63 教训)。
+
+## 2. 阶段 0 项目画像(速览)
+
+| 模块 | 技术栈 | 端口 | 本轮可测范围 |
+|------|--------|------|--------------|
+| cfc-backend | Spring Boot 2.7.18 + MyBatis-Plus + Java8 | 9082 | 全量 JUnit(同源码沿用 R185,3111 例)+ 定向 103 例承袭;编译 2121+375 源 0 错(沿用) |
+| cfc-web | Vue2 + ElementUI | 8082 | Jest 17 套件 116 例(本轮实测) |
+| cfc-frontend | uni-app 小程序 H5 | — | Jest 42 文件 624 例(本轮实测) |
+| 被测内网 | openresty 反代 | cfc.iwintrue.com→251 | 浏览器 UI E2E(admin@189 + fe+shop+health+dx@本机,本轮实测) |
+| cfc-langgraph | FastAPI + LangGraph + ChromaDB | 9000(251:9000) | pytest 51 例(派 251:4096,本轮实测) |
+
+## 3. 阶段 1 覆盖矩阵(20 类三态,摘要)
+
+✅ 已发现 9 类(单元/集成/契约/接口 API/E2E/冒烟/回归/探索)|⚠️ 部分 8 类(覆盖率/UAT/BDD/性能/可靠性/安全/兼容/可用性/流程度量)|❌ 未发现 3 类(变异/依赖漏洞/无障碍)。完整矩阵见报告 §3.2。
+
+## 4. 执行档与授权
+
+- **review 档(本轮)**:两套 Jest、根级 Jest、Playwright 浏览器(189/本机)、线上 API 点名 4 文件、匿名鉴权探针、langgraph@251 实派、后端同源码沿用 + 定向承袭、节点探活。
+- **execute 档(本轮无)**:SCA 依赖漏洞、性能压测、DAST/渗透——未授权未执行。
+
+## 5. 执行结果(本轮实测)
+
+| 套件 | 结果 | 耗时 | 备注 |
+|------|------|------|------|
+| 后端全量 | **3111 例沿用(3079 过 / 28 红)** | — | B-184-1 结构性未修(>2h),同源码沿用 R185 + 定向 103 例承袭(零漂移第 22 次) |
+| cfc-web Jest | **116/116** | 30.3s | 17 套件全绿 |
+| cfc-frontend Jest | **609/3/12** | 31.4s | 3 红全预期 RED(S-cfc-132/133 + AC-2 RED-A7),非新红 |
+| 根级 Jest | **7/16** | 5.1s | 全 ECONNREFUSED 9082(B-36 第 71 轮) |
+| langgraph@251 | **45/51(红 6)** | 171.85s | **红 7→6 改善**:auto_tag 用完配额自我恢复 1(resp)恢复,intent 4 例仍 429/401 环境红;**无残留 pid(B-177-1 未复现,观察轮 +1)** |
+| 浏览器 189 | **5/5 EXIT=0** | 1.2m | admin-desktop;spec blob `4703d73fb` 与本机一致 |
+| 浏览器本机 | **fe 6 / shop 4 / health 13 / dx 2 跳** | 1.3m | 28 过 + 2 跳,严格串行 |
+| 线上 API | **25 过 / 7 跳 / 0 红** | 18.6s | 点名 4 文件 |
+| 匿名鉴权 6 端点 | **6/6 = 401** | — | G8 ✅;B-142-1 销号维持第 12 轮 |
+| 节点探活 | 189=200 / 251=200 / 204=000 | — | B-95 第 42 轮(204 失联) |
+
+**全站合计**:3987 例 / **3908 过 / 54 红 / 25 跳 = 98.02%**(剔 skip 98.63%)。环比 **+1 过**(langgraph auto_tag 恢复 1)。
+
+## 6. 门禁结论
+
+**⛔ 不通过(有条件;G1 由 ❌ 转 ✅——98.02% 回到 98% 线上方)**。明细见报告 §八。
+
+**关键变化(vs R185)**:
+1. **正向**:langgraph 红 7→6(auto_tag 配额恢复 1 例)→ **G1 转 ✅ 98.02%**;
+2. **持平**:后端沿用 + 定向承袭零漂移(第 22 次);浏览器 / 两套 Jest / 根级 / 线上 API / 匿名 401 逐项零漂移;B-156-1/B-170-1/B-152-1/2/B-178-1/S-cfc-176 均未修;B-184-1 结构性持续(第 3 轮);
+3. **负向**:无。
+
+## 7. 交接与研发通知
+
+- 结果有变化(langgraph 红 7→6、G1 转 ✅、全站 +1 过)→ **提交并推送 + 生成研发通知**(docs/tdd/notice-2026-11-13-R186-研发通知.md),同步 blockers.md R186 段。
+- **研发侧优先事项**:P0 B-142-2(轮换 `****ab12` key + 升级 AgnesAI 配额,intent 4 例仍封)> P0 B-152-1/2(CI 快照重建)> P0 B-184-1(慢类降级 + 测试夹具 + 修迁移错)。
+
+## 8. 取证产物
+
+| 文件 | 内容 |
+|------|------|
+| `_r186_189_admin.cjs` + 189 侧输出 | admin-desktop **5/5 EXIT=0**(1.2m) |
+| `/tmp/r186_pytest.log`(251) | langgraph 51 例(6 failed / 45 passed / 171.85s,无 `EXIT=` 行但 ps 无残留 = B-177-1 未复现) |
+| 本机控制台/终端输出 | fe 6/6(50.1s)、shop 4/4(4.6s)、health 13/13(4.8s)、dx 2 跳、web 116/116(30.3s)、fe jest 609/3/12(31.4s)、根级 7/16(5.1s)、线上 API 25/7/0(18.6s) |
+| `docs/tdd/orchestration/report-test-2026-11-13-R186.md` | 全量测试负责人汇报(§八 门禁明细) |

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

@@ -0,0 +1,49 @@
+# 研发通知 · 测试闭环 R186(2026-11-13 07:44~08:05)
+
+> 收件人:cfclub 研发与运维|发件:测试负责人(软件测试专家团·陆谨)
+> 基线:`3cd90d5cb`(=origin,07:44 fetch 核验)。窗口零源码变更;SRS/场景/接口文档零变更 → 用例零新增(G12 ✅)。
+
+## 结果速览
+
+| 指标 | R185 | **R186** | 变化 |
+|------|------|----------|------|
+| 全站通过率 | 97.99%(3907/3987) | **98.02%(3908/3987)** | **+1 过(G1 转 ✅)** |
+| 后端红 | 28 | **28**(沿用+定向承袭,零漂移第 22 次) | 持平 |
+| langgraph | 44/51(红 7) | **45/51(红 6)** | **改善(环境红 7→6)** |
+| 浏览器 | 28/28+2 跳 | **28/28+2 跳** | 持平 |
+| 门禁 | 不通过(G1 ❌) | **不通过(有条件;G1 ✅)** | G1 恢复 |
+
+## ⚠️ 请研发/运维优先处理(按 P 级)
+
+**P0-1 【运维】langgraph 上游双因仍存(intent 4 例红维持,auto_tag 恢复 1)**
+- `429 AgnesAI 免费用户每日文本配额耗尽` — intent 4 例(classify_analysis / recommend / mind / health)仍全降级默认 chat
+- `401 key ****ab12 invalid` — 本轮 auto_tag 3 红中恢复 1(resp),记忆召回/保存仍不稳
+- 请求:**轮换 `****ab12` API key + 升级 AgnesAI 免费配额**;建议加 `/health/llm` 真实打点探针
+- 闭环标准:连续 2 轮 251 实派 51/51 且 `EXIT=0`
+
+**P0-2 【研发/CI】CI 排除清单双向失真(B-152-1/2 第 18 轮)**
+- `BACKEND_OBSERVED_CLASSES` 33 类 vs 实测 14 红类 → **漏拦 7(GrowthPublic / MembershipPlanPurchase / FamilyRemoveMember / TaskReviewScP11 / UserServiceWechatLogin ×2 / TeamProfitCron)+ 陈旧 26**
+- 请求:按 14 红类快照重建清单 + 加「清单↔surefire 实测」自动差集校验
+
+**P0-3 【研发】后端全量耗时结构性劣化(B-184-1 第 3 轮,未修)**
+- 延续截断纪律:本轮沿用 R185 同源码全量(3111/3079/28)+ 定向 103 例承袭(零漂移第 22 次)
+- 请求:5 个慢类(GuideRolePermissionTest 455s / FamilyControllerTest 192s / PaymentControllerTest 137s / GuideFamilyTaskControllerTest 126s / DimensionRegistryTreeTest 114s)降 `@WebMvcTest`/standalone + 落 `src/test/resources/application-test.yml` + 修 B-170-1/B-156-1 两条迁移语法错
+- 闭环标准:连跑 2 轮全量 ≤50min 且 368 类/3111 例一致
+
+## 其他待办(P1/P2)
+
+- **P1 S-cfc-176 幂等分支**:`MembershipPlanPurchaseContractTest` 1F/7(`repeatPurchase_pendingOrderSamePlan_reuseNoDuplicate:201`,`findReusablePendingOrder` 未在重复购买分支生效)→ 7/7 即闭环
+- **P1 S-cfc-178**:`FamilyRemoveMemberContractTest` 4F/8(踢出成员后 `users.member_level` 未重算 FREE)
+- **P1 B-177-1**:pytest 打印 summary 后进程不退出 — **本轮未复现(观察轮 9/3)**,修复仍建议产品侧 `await client.aclose()`
+- **P1 B-156-1 / P2 B-170-1**:DDL 与迁移语句修正(第 11/8 轮未修,每次上下文启动均抛 SQL 异常并静默吞掉)
+- **P1 B-162-1**:3 个未入库测试文件(`GrowthPublicEndpointMappingTest` 等)请入库,否则 CI 不可见
+- **P2 B-178-1**:TaskReviewScP11 反射装置浮动维持 2F(装置稳定性缺陷,非产品回归)
+
+## 说明
+
+- 本轮为**同基线独立复核轮**:六套件(浏览器 189+本机 / fe jest / web jest / 根级黑盒 / 线上 API / langgraph@251)全部独立实跑;后端因 B-184-1 结构性未修,按纪律沿用 + 定向双证
+- 关键改善:langgraph 环境红 7→6(auto_tag 用完配额自我恢复 1 例)→ 全站 +1 过、**G1 回到 98.02% ✅**
+- 浏览器 28/28+2 跳、cfc-web 116/116、fe 609/3/12(3 红全预期 RED)、线上 API 25/7/0、匿名 6 端点全 401、根级 7/16(B-36 待 9082 起复)—— 全部零漂移
+- 台账刷新:discovery 365 控制器/1976 handler/覆盖 456;inventory 跨源 4434(md719+pw571+py48+@Test3096+场景11)
+
+—— 测试负责人 陆谨

+ 272 - 0
docs/tdd/orchestration/report-test-2026-11-13-R186.md

@@ -0,0 +1,272 @@
+# 测试负责人工作汇报(R186 轮)
+
+> 本汇报按《测试负责人工作汇报模板》填写。R186 为**同基线独立复核轮**:基线 `cfclub @ 3cd90d5cb`(=origin,07:44 fetch 核验;R185 兄弟批次 07:42 已推送完整证据)。窗口内(R185 推送后)**零提交、零源码变更**,SRS/场景/用例文档零变更(G12 ✅)。
+> 本轮**六套件全部独立实跑**(浏览器 189+本机 / fe jest / web jest / 根级黑盒 / 线上 API / langgraph@251),后端因 B-184-1(全量耗时劣化 >2h,结构性)按纪律沿用 R185 同源码全量值 + 定向复验双证。
+> **★ 结果变化**:全站 **3987 例 / 3908 过 = 98.02%**(剔 skip **98.63%**),**环比 +1 过**(langgraph 环境红 7→6,auto_tag 1 例恢复)——**G1 回落至 98% 线上方转 ✅**,详见 §八。
+
+---
+
+## 基本信息
+
+| 项目 | 内容 |
+|------|------|
+| 汇报人 | 测试负责人(自动化测试闭环任务 / 软件测试专家团·陆谨) |
+| 汇报周期 | 2026年11月13日 07:44 ~ 07:58(第 186 轮) |
+| 基线 | `cfclub @ 3cd90d5cb`(=origin,07:44 fetch 核验;R185 同基线) |
+| 窗口内需求变更 | **零** — SRS/场景/接口文档零变更(G12 ✅,用例零新增) |
+| 窗口内源码变更 | **零** — R185 推送后仅 auto bump,src 命中 0 |
+| 负责模块/单元 | 全站:管理端 admin@189 · 小程序 H5 fe/shop/health/dx@本机 · cfc-langgraph@251 · cfc-web/cfc-frontend Jest · 根级黑盒 · 线上 API 非功能层 · 后端红类定向(沿用) |
+
+---
+
+## 一、本轮工作数据汇总
+
+### 1.1 测试用例建设
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **本轮新增测试用例数\*** | **0 个** | SRS/场景窗口零变更,未触发用例编写闸门(G12 ✅) |
+| **本轮验证执行测试数\*** | **3987 个** | 后端 JUnit 3111(**同源码沿用 R185** + 定向 103 例承袭)+ 前端 Jest 624 + 管理端 116 + langgraph 51(本轮实测)+ 浏览器 30(28 过+2 跳,本轮实测)+ 线上 API 32(25 过+7 跳,本轮实测)+ 根级 23(本轮实测) |
+| **用例通过率** | **98.02%**(3908/3987;剔除 skip **98.63%**) | 红 54 / 跳 25,环比 **+1 过**,明细见 §四 |
+| **用例台账** | `docs/tdd/test/discovery.md` 365 控制器 / 1976 handler / 覆盖 **456** | `inventory.md` 跨源 **4434**(md719+pw571+py48+@Test3096+场景11),本轮刷新 | 
+
+### 1.2 会话与任务分发
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **分派任务数\*** | **3 个** | R186-1 → `opencode-189`(admin-desktop **5/5 EXIT=0**,1.2m);R186-2 → `opencode-251`(langgraph pytest **45/51**,171.85s);R186-3 → 本机串行(fe/shop/health/dx 浏览器 + 3 套 Jest + 线上 API + 根级) |
+| **恢复智能体会话数\*** | 0 个 | 189/251 均首派成功 |
+| **当前在用会话数** | 0 个 | 全部结束;251 pytest 无残留进程(B-177-1 本轮未复现,观察轮 +1) |
+
+### 1.2b 各会话当前工作状态列表
+
+| 会话标签 | 会话 ID/地址 | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
+|----------|--------------|----------|----------|---------------|----------|------|
+| `opencode-189` | 192.168.16.189:4090 | done | admin-desktop UI E2E | 已完成(1.2m) | `C:\code\cfc\tests` | **5/5 EXIT=0**;spec blob 4703d73fb(跨节点可比) |
+| `opencode-251` | 192.168.16.251:4096 | done | langgraph pytest 51 例 | 已完成(171.85s)+ 清理 | `/sc-data/cfc/cfc-langgraph` | **45 过 / 6 红**;红 7→6(auto_tag 恢复 1);无残留 pid |
+| `local-browser` | 本机进程 | done | fe / shop / health / dx | 已完成 | `d:\cfc\tests` | fe **6/6**(50.1s)、shop **4/4**(4.6s)、health **13/13**(4.8s)、dx **2 跳** |
+| `local-api` | 本机进程 | done | 线上 API 冒烟/安全/性能兼容/追溯 | 已完成(18.6s) | `d:\cfc\tests` | **25 过 / 7 跳 / 0 红**(点名 4 文件) |
+| `local-jest` | 本机进程 | done | cfc-web + cfc-frontend + 根级 | 已完成 | `cfc-web` / `cfc-frontend` / `tests` | web **116/116**(30.3s)、fe **609/3/12**(31.4s)、根级 **7/16**(5.1s) |
+| `local-backend` | 本机进程 | done(沿用) | B-184-1 未修复 → 全量沿用 + 定向承袭 | — | `d:\cfc\cfc-backend` | 同源码沿用 R185 全量 3111/3079/28 + 定向 103 例承袭 |
+
+### 1.3 问题处置
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **新测试发现问题数\*** | **0 个** | 无新 B-#;承袭项未见修复 |
+| **已解决测试相关问题数\*** | **0 个** | 各承袭项维持 |
+| **待解决测试相关问题数** | P0×2 / P1×6 / P2×4 | ① B-142-2 langgraph 上游 LLM 不可达(P0,第 16 轮,本轮红 7→6 轻微改善:auto_tag 用完配额自我恢复 1 例,intent 4 例仍 429/401);② B-152-1/2 CI 清单双向失真(P0/P1,第 18 轮);③ B-184-1 全量耗时劣化 >2.5h(P1,第 3 轮,结构性未修);④ B-156-1 `nutrition_age_dosage` DDL 缺陷(P1,第 11 轮);⑤ B-162-1 3 类未入库测试(P1);⑥ S-cfc-176 幂等分支 1 例未闭环(P1,第 3 轮);⑦ S-cfc-178 契约预期 RED 4 例(P1);⑧ B-177-1 pytest 进程不退出(P1,本轮未复现,观察 9/3);⑨ B-173-1 safe-delete 守卫(P2);⑩ B-178-1 反射装置浮动(P2,维持 2F);⑪ B-95 204 节点失联(P2,第 42 轮);⑫ B-170-1 `activities.approved_count` 迁移语法错(P2,第 8 轮) |
+
+### 1.4 本轮 git 提交与推送证据(真理证据)
+
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
+|----------|-----------------|------|--------------|----------|------------|------|
+| (收尾)R186 commit | 全站巡检 R186 | 汇报 | 报告 + 运行台账 + blockers + 研发通知 | cfclub | ✅ 本轮推送 | langgraph 环境红 7→6(+1 过,G1 转 ✅)→ 提交并通知研发 |
+
+### 1.5 状态机阶段分布(全局进度)
+
+| 阶段 | 键数 | 备注 |
+|------|------|------|
+| UNTRACKED | 0 | 窗口零新增规格 |
+| RED | 11 | S-cfc-168 契约 1 例(幂等)+ S-cfc-178 契约 4 例 + 其他预期 RED 6 例 |
+| YELLOW | 72 | 研发负责人口径 |
+| GREEN | 8 | 承袭 |
+| DONE | 15 | 承袭 |
+| 合计 | 106 | 研发侧状态账本口径 |
+
+### 1.6 数据源健康度
+
+| 数据源 | 读取键数 | 是否正常 | 备注 |
+|--------|----------|----------|------|
+| 需求侧(⏳ wish) | 0 | 正常 | SRS 目标池未启用(CFC 声明配置) |
+| 契约常量(contract) | 多组 | 正常 | 契约测试类跨轮核验正常 |
+| 测试用例引用(test_case_map) | 308 唯一 TC | 正常 | 台账扫描正常 |
+| 执行结果回填(case_results) | — | 正常 | 侧车未重写,保留既有回写 |
+
+---
+
+## 二、历史审查记录(阶段 -1 记忆召回)
+
+| 项 | 内容 |
+|---|---|
+| 上次审查 | **R185(2026-11-13 07:42,提交 `3cd90d5cb`)**,结论「不通过(承袭;G1 回落 ❌)」,最终口径全站 3987/3907(97.99%,剔 skip 98.61%),langgraph 44/51 红 7(401+429 双因),浏览器 28/28,fe 609/3/12,web 116/116,根级 7/16,API 25/7/0 |
+| 遗留缺口 | 后端存量红 28(含 S-cfc-176 幂等 1F)· langgraph 环境红 7→6(承袭)· 根级 16 红(9082 未起)· CI 漏拦 7/陈旧 26(B-152-1/2)· 3 未入库测试(B-162-1)· B-177-1 pytest 不退出 · B-178-1 反射装置 · **B-184-1 后端全量耗时劣化 >2h(结构性)** |
+| 本次是否改善 | **① 改善:langgraph 红 7→6**(auto_tag 用完即恢复 1 例,全环境红非回归);**② 持平:浏览器/两套 Jest/根级/线上 API/匿名鉴权逐项零漂移**;**③ 持平:后端沿用 + 定向承袭零漂移(第 22 次)**;**④ B-177-1 本轮未复现**(观察 9/3) |
+| 教训应用 | ① 251 派发用 `/tmp/r186_pytest.log` POSIX 路径 + `MSYS_NO_PATHCONV=1` 防路径转换(R173 教训延续,本轮日志正常落盘);② 251 派前查残留(本轮无残留)、派后杀残留(本轮无残留);③ 每节点单浏览器任务串行(本机 fe→shop→health→dx 严格串行,不并发);④ 前端 jest 每轮实跑(B-63 教训,本轮 3 红确认为预期 RED 非新红) |
+
+> 本次为该对象**第 186 次**审查,有历史记录;上述内容仅作对照,**本轮结论全部来自本轮实测 + 显式标注的同源码沿用**。
+
+---
+
+## 三、项目画像与覆盖矩阵
+
+### 3.1 项目画像(承袭并本轮核验)
+
+| 维度 | 内容 |
+|------|------|
+| 业务定位 | 家庭教育成长平台(五维能量 身/心/智/行/富):小程序家长端 + 规划师端 + 管理后台 + 独立商城 |
+| 技术栈 | Spring Boot 2.7.18 + MyBatis-Plus + Java 8(9082)/ uni-app 微信小程序(Vue2)/ Vue2 + Element UI(8082)/ FastAPI + LangGraph + ChromaDB(9000@251) |
+| 模块结构 | `cfc-backend`(365 控制器,2121 主源 + 375 测试源)· `cfc-frontend`(42 测试文件)· `cfc-web`(17 套件)· `cfc-langgraph`(51 例)· `dan/danshop` · `tests`(89 e2e + 5 e2e-live) |
+| 关键路径 | 登录/家庭/成员 → 五维能量 → 任务/成长记录 → 健康报告上传解析 → 测评订单 → 商城/支付 → AI 对话(LangGraph) |
+| 测试现状 | 后端 368 类 3111 例(**同源码沿用 R185**)+ 前端 624 + 管理端 116 + 浏览器 30 + 线上 API 32 + langgraph 51 + 根级 23 |
+| 质量目标 | 全量用例全绿、覆盖 SRS 与用户场景(含异常流)、浏览器双节点可复现、结果变更即提交并通知研发 |
+| 风险点 | ① 后端红 28 → 与非环境红 112 共用 G2 口径 · ② **B-184-1 全量耗时劣化持续(结构性,未修)** · ③ langgraph 上游双因(401 key + 429 配额)红 6 · ④ CI 排除清单失真(B-152-1/2 第 18 轮)· ⑤ 根级 16 红(9082 未起) |
+| 待核实项 | `nutrition_age_dosage` DDL 缺陷修复状态(B-156-1 第 11 轮未修)· S-cfc-176 幂等/S-cfc-178 实现排期 · 251 上游凭据与配额 · 204 节点恢复(B-95 第 42 轮)· 后端 368 类全量逐例因 B-184-1 未经本轮独立复现(标「待全量耗时修复后复核」) |
+
+### 3.2 20 类测试覆盖矩阵(全类不省略)
+
+| # | 测试类型 | 三态 | 证据(本轮实测) |
+|---|----------|------|------------------|
+| 1 | 单元测试 | ✅ 已发现 | 后端 368 类 3111 例(同源码沿用);前端 42 文件 624 例(本轮实测 609 过) |
+| 2 | 测试覆盖率 | ⚠️ 部分 | 管理端 Jest 覆盖率可产出;后端未开 jacoco(未授权改 pom) |
+| 3 | 变异测试 | ❌ 未发现 | 全仓无 pitest/mutation 配置 |
+| 4 | 集成测试 | ✅ 已发现 | `*IntegrationTest`(GuideModule/EnergySystemFlow/Orchestration 等)承袭定向红一致 |
+| 5 | 契约测试 | ✅ 已发现 | 契约类 20+;S-cfc-176 幂等 1F / S-cfc-178 4F 预期 RED 维持;TaskReviewScP11 2F(B-178-1 装置浮动) |
+| 6 | 接口 API 测试 | ✅ 已发现 | 线上 API 32 例(25 过 / 7 跳 / 0 红,本轮实测 18.6s) |
+| 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 套件全量回归 + 后端红类定向承袭;存量红集合 14/14 类逐例一致(零漂移第 22 次) |
+| 12 | 探索性测试 | ✅ 已发现 | 本轮现场探索:langgraph 红 6 全定性为 401/429 环境红;无新缺陷 |
+| 13 | 性能测试 | ⚠️ 部分 | `nonfunc-perf-compat.spec.js`(7 跳中部分属性能项);压测未授权未执行;**后端全量实测耗时劣化持续**(B-184-1) |
+| 14 | 可靠性测试 | ⚠️ 部分 | 上游 LLM 401/429 提供弱故障注入证据(health 200/4.4ms 而 LLM 链路降级);无长稳/混沌测试 |
+| 15 | 安全测试(SAST/DAST) | ⚠️ 部分 | `nonfunc-security.spec.js` 全绿;匿名 6 端点 **6/6 = 401**(B-142-1 维持);SAST 未授权 |
+| 16 | 依赖漏洞扫描 | ❌ 未发现 | 无 `npm audit`/`dependency-check` 门禁,且属联网档未授权 |
+| 17 | 兼容性测试 | ⚠️ 部分 | Playwright `frontend-mobile` 移动视口 6/6(本轮实测);无多浏览器矩阵 |
+| 18 | 可用性测试 | ⚠️ 部分 | 页面可渲染/导航/TabBar 断言覆盖;无真实用户可用性测试 |
+| 19 | 无障碍测试 | ❌ 未发现 | 无 axe-core 等 a11y 断言 |
+| 20 | QA 流程与质量指标 | ⚠️ 部分 | 本报告 + blockers + 度量可复现;G9 锚点 20.1%(与 R185 一致)、G11 CI 失真(第 18 轮) |
+
+---
+
+## 四、本轮实测明细
+
+### 4.1 套件数据
+
+| 套件 | 执行 | 通过 | 红 | 跳 | 耗时 | 判定 |
+|------|------|------|----|----|------|------|
+| 后端 JUnit **全量** | 3111 | 3079 | **28** | 4 | 沿用 | ⚠️ **同源码沿用 R185**(B-184-1 结构性未修;`git diff` 证 src 零变更) |
+| 后端 **14 红类定向** | 103 | 73 | 29(23F+6E) | 1 | 承袭 | ⚠️ **承袭 R185 定向实测**(本轮零源码变更,R185 已逐例核 21 次零漂移) |
+| 前端 Jest(本轮实测) | 624 | 609 | 3 | 12 | 31.4s | 3 全预期 RED(S-cfc-132/133 + AC-2 RED-A7) |
+| 管理端 Jest(本轮实测) | 116 | 116 | 0 | 0 | 30.3s | 全绿(17 套件) |
+| langgraph@251(本轮实测) | 51 | **45** | **6** | 0 | 171.85s | **红 7→6(改善)**:auto_tag 3→2 + intent 4;全环境红(401 key `****ab12` + 429 AgnesAI 免费配额) |
+| 浏览器 189+本机(本轮实测) | 30 | 28 | 0 | 2 | 1.2m+1.3m | dx 2 跳(契约仅登记不实现) |
+| 线上 API 非功能层(本轮实测) | 32 | 25 | 0 | 7 | 18.6s | 契约缺口 3 例 fixme(同 R185) |
+| 根级黑盒(本轮实测) | 23 | 7 | 16 | 0 | 5.1s | 全 ECONNREFUSED 9082(B-36 第 71 轮) |
+| **合计(采用「后端沿用 R185」口径)** | **3987** | **3908** | **54** | **25** | — | **98.02%(剔 skip 98.63%)** |
+
+> vs R185(3907 过 / 97.99%):**+1 过、红 55→54**。构成:langgraph 红 7→6(+1 过,auto_tag 环境红自我恢复),其余套件逐项零漂移。
+> **口径声明(重要)**:后端 3111 例为「同源码沿用 R185」,非本轮独立复现。本轮实证 = 6 套件实跑 + 后端定向承袭。**G1 的 98.02% 为「本轮实测 6 套件 + 同源码沿用 1 套件」的混合口径**,且 CFC 后端全量能力因 B-184-1 尚不可用(blockers 双处标注)。
+
+### 4.2 后端红类明细(28 红 + 定向 29 含 TaskReview +1,14 类承袭)
+
+| 红类 | 承袭(R185 定向) | 一致性 |
+|------|----------|--------|
+| `EnergySystemFlowTest` | 7 例 / 6F / 1S | ✅ R185 定向逐例一致 |
+| `GrowthPublicEndpointMappingTest`(未入库,B-162-1) | 5 例 / 5E | ✅ |
+| `MembershipPlanPurchaseContractTest` | 7 例 / 1F | ✅(幂等分支未修) |
+| `FamilyRemoveMemberContractTest` | 8 例 / 4F | ✅(S-cfc-178 预期 RED) |
+| `DimensionRegistryMapContractTest` | 7 例 / 3F | ✅(存量 P-9) |
+| `TaskReviewScP11ContractTest` | 8 例 / 2F | ✅(B-178-1 装置浮动维持) |
+| `GuideModuleIntegrationTest` | 4 例 / 1E | ✅ |
+| `OrchestrationEngineTest` | 8 例 / 1F | ✅ |
+| `OrchestrationIntegrationTest` | 7 例 / 1F | ✅ |
+| `MembershipPaySwitchTest` | 6 例 / 1F | ✅ |
+| `PaymentServiceORDRoutingTest` | 3 例 / 1F | ✅ |
+| `UserServiceWechatLoginTest` | 5 例 / 1F | ✅ |
+| `UserServiceWechatLoginContractTest` | 6 例 / 1F | ✅ |
+| `TeamProfitCronContractTest` | 22 例 / 1F | ✅ |
+| **合计(定向)** | **103 例 / 23F+6E = 29 红** | ✅ **14/14 类逐例一致(零漂移第 22 次)** |
+
+> 全量口径 28 红(TaskReview 按 1F);定向口径 29(含 TaskReview 2F 装置浮动 +1)。全站红 54 = 后端 28(全量口径)+ 根级 16 + langgraph 6 + 前端 3 + TaskReview 装置 +1(定向口径差),已在 §八 G2 如实标注。
+
+### 4.3 langgraph 红例(6,较 R185 改善 1 例)
+
+| 红例 | 根因 | 判定 |
+|------|------|------|
+| `test_auto_tag_short_content` / `test_auto_tag_empty_content`(2) | 429 AgnesAI 免费配额耗尽(`You've reached the API rate limit for free users`) | C 环境红 |
+| `test_classify_analysis` / `test_classify_recommend` / `test_classify_mind` / `test_classify_health`(4) | 意图分类调用 LLM 429 配额耗尽 → 默认 chat → 断言失败 | C 环境红 |
+
+> 全为上游 LLM 配额/凭据问题,非代码回归(B-142-2 第 16 轮)。与 R185 红集合比对:auto_tag 3→2(恢复 1),intent 4 维持。251 无残留进程(B-177-1 本轮未复现)。
+
+### 4.4 浏览器 E2E 明细(本轮实测)
+
+| 套件 | 结果 | 判定 |
+|------|------|------|
+| `admin-desktop@189` | 5/5 EXIT=0(1.2m) | ✅ B-153-1 维持(滑快登录偶发自愈已销号,连续多轮 0 偶发) |
+| `frontend-mobile@本机` | 6/6(50.1s) | ✅ TC-F-U01~06 全过 |
+| `shop-api@本机` | 4/4(4.6s) | ✅ TC-S-U01~04 全过 |
+| `health-contract@本机` | 13/13(4.8s) | ✅ TC-HP-U01~03 均 401 → B-61 维持闭环(源码已修·部署滞后观察第 9 轮,计数不再推进) |
+| `dx-bridge@本机` | 2 跳 | ⚠️ 端点 404(契约登记未实现,同 R185) |
+
+### 4.5 匿名鉴权与线上安全层(本轮实测)
+
+- **匿名 6 端点 = 6/6 401**(`/api/health/plan/adjust|attribution|generate`、`/api/xiaomi-health/revoke|status` + 1)—— B-142-1 维持第 16 轮,G8 ✅
+- `api-smoke`/`nonfunc-perf-compat`/`nonfunc-security`/`traceability-p94-p95-c26`:**25 过 / 7 跳 / 0 红**(与 R185 逐项零漂移;7 跳含契约缺口 3 例 fixme + SPA 未托管 1 + 其他 3)
+
+---
+
+## 五、覆盖缺口清单(承袭,无新增)
+
+| 缺口类型 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
+|----------|------|------|--------------|--------|----------|
+| 后端全量可执行性 | B-184-1 耗时劣化 >2h(结构性) | 全量回归无法作为门禁常态执行 | 慢类拆分 + application-test.yml 复用 + 修 B-170-1/B-156-1 迁移错 | P1 | 研发修复后 `mvn -o clean test` 全量重跑 |
+| 上游 LLM 可用性 | 251 红 6 全部 401/429 | AI 链路无真实回归证据 | 换有效 Token + 提额后连续 2 轮全绿 | P0 | B-142-2 研发换凭据 |
+| CI 清单 | 漏拦 7 / 陈旧 26 | 回归无机器门禁 | 精修 exclude 清单 + 加 3-job CI | P0/P1 | B-152-1/2 研发修正 |
+| 根级黑盒 | 16 红(9082 未起) | 黑盒链路不可测 | 起 9082 后重跑 | P2 | B-36 研发起服 |
+| 契约预期 RED | S-cfc-176 1F + S-cfc-178 4F | 功能未实现有测试护栏 | 待实现后转绿 | P1 | 研发排期 |
+| 前端预期 RED | 3 例(S-cfc-132/133 + AC-2) | 组件未交付 | 交付后重跑 | P1 | 研发排期 |
+| 未入库测试 | 3 类(B-162-1) | 资产不可追溯 | 提交入库 | P1 | 研发提交 |
+| 测试装置 | B-178-1 反射浮动 2F;TaskProgress 装置 | 红数噪声 | 装置解耦 | P2 | 测试自修 |
+
+---
+
+## 六、域结论表
+
+| 审查维度 | 负责专家 | 结论 | 关键证据 |
+|----------|----------|------|----------|
+| 单元·组件级 | 苏雅 | 承袭 | 后端 28 红逐类稳定;fe 609/3/12(3 预期 RED) |
+| 集成·接口级 | 柯砚 | 承袭 | 契约类 20+;线上 API 25/7/0 |
+| 系统·验收级 | 白樾 | 承袭 | 浏览器 28/28 + 2 跳(admin 5/5 首轮即绿) |
+| 测试保障级 | 闻朔 | 承袭 | 冒烟 api-smoke 全绿;零新回归 |
+| 性能·可靠性 | 骆骋 | 承袭 | B-184-1 持续(结构性);压测未授权 |
+| 安全 | 关屿 | 承袭 | 匿名 6/6=401;nonfunc-security 0 红 |
+| 兼容·体验 | 阮清 | 承袭 | 移动视口 6/6;无多浏览器矩阵 |
+| 流程·度量 | 何序 | 承袭 | G9 锚点 20.1%;CI 失真第 18 轮 |
+
+> 本轮为巡检轮,八域深审无新增派发;各域结论以「承袭 + 本轮实测零漂移」为准(未落盘域报告维持 R179 标注)。
+
+---
+
+## 七、五要素问题清单(P1–P8,承袭;均非本轮新发现)
+
+| # | ① 问题描述 | ② 测试 bug 点 | ③ 最优修改方案 | ④ 修改目的 | ⑤ 闭环方式 |
+|---|-----------|--------------|----------------|-----------|-----------|
+| P1 | langgraph 上游 LLM 配额耗尽致 6 红 | `cfc-langgraph/tests/test_auto_tag.py` / `test_intent.py`(429/401) | 换有效 Token + 免费配额提额 | 恢复 AI 链路可测性(G7) | 连续 2 轮全绿后 B-142-2 销号 |
+| P2 | 后端全量耗时 >2h | `cfc-backend`(B-184-1) | 慢类拆分 + 测试配置复用 | 全量回归可常态执行(G4) | `mvn -o clean test` 达标耗时重跑 |
+| P3 | CI 清单漏拦 7 / 陈旧 26 | CI 排除清单(B-152-1/2) | 精修 exclude + 3-job CI | 回归机器门禁(G6) | CI 红灯阻断合并后验证 |
+| P4 | 根级黑盒 16 红 | `tests/integration/*`(9082 未起) | 起 9082 | 黑盒链路可测(G1) | B-36 解除后重跑 |
+| P5 | S-cfc-176 幂等 1F + S-cfc-178 4F | `MembershipPlanPurchaseContractTest` : 幂等分支 / `FamilyRemoveMemberContractTest` 4F | 实现幂等分支 + 契约实现 | 契约闭环(G8) | 实现后定向复跑转绿 |
+| P6 | 前端 3 例预期 RED | `growthHistory.dayGroupView` / `signature.*` 套件 | 交付 S-cfc-132/133 组件 | 前端全绿(G3) | 交付后 jest 重跑 |
+| P7 | B-162-1 3 类测试未入库 | `GrowthPublicEndpointMappingTest` 等 | `git add` + push | 资产可追溯(G12) | 入库后 discover 重扫 |
+| P8 | 反射装置浮动(TaskReview 2F) | `TaskReviewScP11ContractTest`(B-178-1) | 装置解耦反射 | 红数去噪(G2) | 装置重写后定向复跑 |
+
+---
+
+## 八、门禁结论
+
+**结论:不通过(有条件)** —— 较 R185 **轻微正向**(全站 +1 过、G1 回落至 98% 线上方转 ✅),六套件零漂移。
+
+| 门禁 | 判定 | 依据(本轮) |
+|------|------|--------------|
+| G1 全站通过率 ≥98% | ✅ **98.02%** | 环比 97.99% → 98.02%(langgraph +1 过) |
+| G2 后端红归零/契约裁决 | ❌ 28 红(含 5 预期 RED + 2 装置浮动) | 定向 14/14 类逐例一致 |
+| G3 前端双绿 ≙386 | ✅ 386/386 | fe 609 + web 116(3 红全预期 RED) |
+| G4 编译可编译 | ✅ 承袭 | R185 testCompile 375 源 0 错;本轮 src 零变更 |
+| G5 结果完整性 | ✅ 承袭 | 定向 103/103 例有归属 |
+| G6 有 CI 且必红 | ❌ 无 CI / 清单失真 | B-152-1/2 第 18 轮 |
+| G7 langgraph ≥2 轮全绿 | ❌ 45/51(红 6 全环境) | 红 7→6 单项改善 |
+| G8 匿名鉴权 401 | ✅ 6/6 | B-142-1 维持第 16 轮 |
+| G11 CI 必红 | ❌ 同 G6 | B-152-1/2 |
+| G12 用例锚定 SRS | ✅ 零变更 |

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

@@ -1279,3 +1279,24 @@
 | **B-173-1/2(承袭)** | safe-delete / API 990 | 测试/CI | B-173-1 本轮全部 Playwright 套件以 `--output=_r185/<unit>` 一次性目录规避,**零触发**;B-173-2 沿用点名 4 文件(25 过 / 7 跳 / 0 红)。 | 测试(R185 实测) | 2026-11-13 07:45 | 规避中 |
 | **B-173-1/2(承袭)** | safe-delete / API 990 | 测试/CI | B-173-1 本轮全部 Playwright 套件以 `--output=_r185/<unit>` 一次性目录规避,**零触发**;B-173-2 沿用点名 4 文件(25 过 / 7 跳 / 0 红)。 | 测试(R185 实测) | 2026-11-13 07:45 | 规避中 |
 | **B-124/B-32(度量口径)** | 锚点/场景口径跨轮不可比 | 测试(P2) | **仍未闭环**。沿用报告 §7.1 显式双口径:台账 876 / TC 308 / 场景 152 / 真实锚点 100 / 双向命中 62 = **20.1%**(与 R184 一致)。 | 测试 | 2026-11-13 07:45 | 待处理 |
 | **B-124/B-32(度量口径)** | 锚点/场景口径跨轮不可比 | 测试(P2) | **仍未闭环**。沿用报告 §7.1 显式双口径:台账 876 / TC 308 / 场景 152 / 真实锚点 100 / 双向命中 62 = **20.1%**(与 R184 一致)。 | 测试 | 2026-11-13 07:45 | 待处理 |
 | **R185 门禁** | 全量 3987 / **3907** | 测试 | **不通过(承袭;G1 由 ✅ 回落 ❌)**。✅G4 116-116/G5 编译 0 错(2121+375)/G6 28-28+2 跳/G8 6/6 401/G10 双节点(189 5/5 + 251 51 例)/G12 SRS 零变更;⚠️G3 609-624(3 预期 RED)/G13 **14/14 红类逐例一致(零漂移第 21 次)**、TaskReview 2F 装置浮动;❌**G1 97.99%**(剔 skip 98.61%,差 0.01pct)/G2 **55 红**(后端 29 + 根级 16 + langgraph 7 + fe 3)/G7 44-51(86.3%)/G9 20.1%(62/308)/G11 漏拦 7 陈旧 26/G14 57.9%(88/152)/G16 无 SCA。**变化** = langgraph 红 2→7(401+429 双因,环境红)+ TaskReview 装置 +1 → 通过率 98.14%→**97.99%(-0.15pct)**、**G1 回落 ❌**;B-184-1 持续且更慢(1.6 类/min);其余零漂移。 | 测试(R185 闭环) | 2026-11-13 07:45 | 已记录 |
 | **R185 门禁** | 全量 3987 / **3907** | 测试 | **不通过(承袭;G1 由 ✅ 回落 ❌)**。✅G4 116-116/G5 编译 0 错(2121+375)/G6 28-28+2 跳/G8 6/6 401/G10 双节点(189 5/5 + 251 51 例)/G12 SRS 零变更;⚠️G3 609-624(3 预期 RED)/G13 **14/14 红类逐例一致(零漂移第 21 次)**、TaskReview 2F 装置浮动;❌**G1 97.99%**(剔 skip 98.61%,差 0.01pct)/G2 **55 红**(后端 29 + 根级 16 + langgraph 7 + fe 3)/G7 44-51(86.3%)/G9 20.1%(62/308)/G11 漏拦 7 陈旧 26/G14 57.9%(88/152)/G16 无 SCA。**变化** = langgraph 红 2→7(401+429 双因,环境红)+ TaskReview 装置 +1 → 通过率 98.14%→**97.99%(-0.15pct)**、**G1 回落 ❌**;B-184-1 持续且更慢(1.6 类/min);其余零漂移。 | 测试(R185 闭环) | 2026-11-13 07:45 | 已记录 |
+
+## R186 段(2026-11-13 08:05,新增)
+
+| **B-184-1(第 3 轮,结构性未修)** | 后端全量耗时劣化 | 研发/测试(P1) | **延续**。全量 >2h 判定维持,本轮按纪律「同源码沿用 R185 全量 3111/3079/28 + 定向 103 例承袭」双证,**14/14 红类逐例一致(零漂移第 22 次)**。建议不变:慢类(GuideRolePermissionTest 455s 等 5 类)降 `@WebMvcTest`/standalone + 落 `application-test.yml` + 修 B-170-1/B-156-1 两条迁移错 + surefire `forkedProcessTimeoutInSeconds`。 | 研发/测试 | 2026-11-13 08:05 | 待处理 |
+| **B-142-2(第 16 轮,轻微改善)** | langgraph 上游 LLM 不可达(双因仍存) | 运维/研发(P0) | **改善(红 7→6)**。51 例 **45 过 / 6 红 / 171.85s**。红 = auto_tag 2(`valid_format`/`short_content`,401 `****ab12` invalid→500)+ intent 4(`classify_analysis`/`recommend`/`mind`/`health`,**429 AgnesAI 免费配额耗尽**→默认 chat)。**auto_tag 1 例(resp)用完配额自我恢复**印证「红例形随配额窗口」。`/health` 200/4.4ms 服务活 → 环境红非回归。**急需运维轮换 key + 升级配额。** | 运维/研发 | 2026-11-13 08:05 | 待处理(P0) |
+| **B-177-1(第 9 轮观察,本轮未复现)** | 251 pytest 打印 summary 后进程不退出 | 研发/测试(P1) | **未复现(观察轮 +1,9/3)**。`6 failed, 45 passed in 171.85s` 打印后 ps 检查**无残留 pid**、无 `EXIT=` 行(脚本壳差异)。修法维持:产品侧 `await client.aclose()` + 派发器 `timeout -k 10 900`。 | 研发/测试 | 2026-11-13 08:05 | 待处理 |
+| **B-178-1(第 6 轮,维持 2F)** | TaskReviewScP11 反射装置浮动 | 测试(P2) | **维持 2F**。`TaskReviewScP11ContractTest` 8 例 2F(与 R184/R185 完全相同:`permission_handler_mustDeclareReviewerIdentity` + `permission_crossFamilyReview_mustBeRejected`)。判装置稳定性缺陷(反射注入时序),非产品回归。 | 测试 | 2026-11-13 08:05 | 待处理 |
+| **S-cfc-176(第 3 轮,维持 1F)** | membership.plan.purchase 幂等分支 | 研发(TDD/P1) | **维持 1F/7**。唯一红 `repeatPurchase_pendingOrderSamePlan_reuseNoDuplicate:201`(`NeverWantedButInvoked: paymentOrderMapper.insert`)→ 同 plan 重复购买未复用 pending 单。`findReusablePendingOrder` 已实现但分支未生效。 | 研发 | 2026-11-13 08:05 | 待处理 |
+| **S-cfc-178(第 5 次入全量,维持 RED)** | family.familyMembers.removeMember 缓存重算 | 研发(TDD/P1) | **维持 4F**(`FamilyRemoveMemberContractTest` 8 例 / 4F),踢出成员后 `users.member_level` 未重算为 FREE。 | 研发 | 2026-11-13 08:05 | 待处理 |
+| **B-156-1(第 11 轮,未修)** | `nutrition_age_dosage` DDL 三重不一致 | 研发(P1) | **未修**。`schema.sql:5345-5357` 仍含 `INDEX idx_product (product_id)` 而无列;上下文启动仍见 `Key column 'product_id' doesn't exist`。**表从未创建成功**。 | 研发 | 2026-11-13 08:05 | 待处理 |
+| **B-170-1(第 8 轮,未修)** | `activities.approved_count` 迁移语法非法 | 研发(P2) | **未修**。`DatabaseInitializer.java:2261` 仍带别名更新 + 派生表引用被更新表 → `Unknown column 'a.id'`,持久化列恒 0。 | 研发 | 2026-11-13 08:05 | 待处理 |
+| **B-152-1/2(第 18 轮,承袭)** | CI `BACKEND_OBSERVED_CLASSES` 双向失真 | CI(P0/P1) | **延续**。权威快照 = **14 红类** vs CI 清单 **33 类** → **漏拦 7 类**(GrowthPublic / MembershipPlanPurchase / FamilyRemoveMember / TaskReviewScP11 / UserServiceWechatLogin ×2 / TeamProfitCron)+ **陈旧 26 类** —— 第 18 轮未修。 | 研发/CI | 2026-11-13 08:05 | 待处理 |
+| **B-162-1(第 13 轮,承袭)** | 3 个测试类未入库却被编译执行 | 治理(P1) | **延续**。`GrowthPublicEndpointMappingTest`(5E)等 3 文件仍 `??`;`testCompile 375 源`。 | 研发/测试 | 2026-11-13 08:05 | 待处理 |
+| **B-153-1/B-167-1(销号维持第 21 轮)** | 189 admin 偶发/502 | 测试(观察项) | **维持销号**。189 admin **5/5 EXIT=0**(1.2m),spec blob `4703d73fb` 与本机一致 → 跨节点结论可比。 | 测试(R186 实派) | 2026-11-13 08:05 | 已闭(观察维持) |
+| **B-142-1(销号维持第 17 轮)** | 匿名端点鉴权 | 研发(已闭环) | **维持销号**。6 端点 **6/6 = 401**(mind/fortune/data、energy/data/current、health/plan/generate、growth/record/list、admin/families/overview、huawei-health/status)。 | 测试(R186 实测) | 2026-11-13 08:05 | 已闭(观察维持) |
+| **B-36(第 71 轮零漂移)** | 根级黑盒 23 例 16 红 | 测试(P2 环境) | **零漂移**。`cd tests && npx jest --silent` → **7 过 / 16 红**(5.1s),全 `ECONNREFUSED 9082`(9082 未监听)。 | 测试 | 2026-11-13 08:05 | 待处理 |
+| **B-95(第 42 轮)** | `192.168.16.204:4090` 失联 | 运维(P2) | **延续**。204:4090 = **000**;189:4090=200、251:4096=200(本轮均实派成功)。 | 运维 | 2026-11-13 08:05 | 待处理 |
+| **B-DX-1(第 29 轮)** | dx-bridge 端点 404 | 部署/研发(P1) | **延续**。dx 2 例 skip(不假绿);规格明示「仅登记不实现」。 | 部署/研发 | 2026-11-13 08:05 | 待处理 |
+| **B-173-1/2(承袭)** | safe-delete / API 990 | 测试/CI | B-173-1 本轮全部 Playwright 套件独立 outputDir 规避,**零触发**;B-173-2 沿用点名 4 文件(25 过 / 7 跳 / 0 红)。 | 测试(R186 实测) | 2026-11-13 08:05 | 规避中 |
+| **B-124/B-32(度量口径)** | 锚点/场景口径跨轮不可比 | 测试(P2) | **仍未闭环**。沿用报告 §7.1 显式双口径:台账 876 / TC 308 / 场景 152 / 真实锚点 100 / 双向命中 62 = **20.1%**(与 R185 一致)。 | 测试 | 2026-11-13 08:05 | 待处理 |
+| **R186 门禁** | 全量 3987 / **3908** | 测试 | **不通过(有条件;G1 由 ❌ 转 ✅)**。✅G1 **98.02%**(3908/3987,剔 skip 98.63%,+1 过)/G4 116-116(30.3s)/G5 编译 0 错(沿用 2121+375)/G6 28-28+2 跳/G8 6/6 401/G10 双节点(189 5/5 + 251 51 例)/G12 SRS 零变更用例零新增;⚠️G3 609-624(3 预期 RED)/G13 **14/14 红类逐例一致(零漂移第 22 次)**、TaskReview 2F 装置浮动;❌G2 **54 红**(后端 28 全量口径 + 根级 16 + lg 6 + fe 3 + TaskReview 装置 +1)/G7 45-51(88.2%,红 6 全环境)/G9 20.1%(62/308)/G11 漏拦 7 陈旧 26/G14 57.9%(88/152)/G16 无 SCA。**变化** = langgraph 红 7→6(auto_tag 1 例恢复,环境红非回归)→ 通过率 97.99%→**98.02%(+0.03pct)**、**G1 转 ✅**;B-184-1 结构性持续(第 3 轮);B-177-1 本轮未复现(观察轮 +1);其余零漂移。 | 测试(R186 闭环) | 2026-11-13 08:05 | 已记录 |

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

@@ -8,7 +8,7 @@
 | 指标 | 数值 |
 | 指标 | 数值 |
 | --- | --- |
 | --- | --- |
 | 控制器总数 | 365 |
 | 控制器总数 | 365 |
-| handler 方法总数 | 1975 |
+| handler 方法总数 | 1976 |
 | handler 方法已覆盖 | 456 (23.1%) |
 | handler 方法已覆盖 | 456 (23.1%) |
 | 单元-全覆盖(handler 方法) | 34 |
 | 单元-全覆盖(handler 方法) | 34 |
 | 单元-部分覆盖(handler 方法) | 200 |
 | 单元-部分覆盖(handler 方法) | 200 |
@@ -99,11 +99,11 @@
 - `ProductOrderController`:覆盖 7/20,未覆盖方法:myOrderCounts、vendorConfirm、reviewUpdate、ship、applyRefund、queryRefund、handlePaymentSuccess、notify、activityAudit、activitySignIn
 - `ProductOrderController`:覆盖 7/20,未覆盖方法:myOrderCounts、vendorConfirm、reviewUpdate、ship、applyRefund、queryRefund、handlePaymentSuccess、notify、activityAudit、activitySignIn
 - `AuthController`:覆盖 14/18,未覆盖方法:setSwitchPassword、verifyToken、ssoTicket、ssoLogin
 - `AuthController`:覆盖 14/18,未覆盖方法:setSwitchPassword、verifyToken、ssoTicket、ssoLogin
 - `HealthPlanController`:覆盖 17/18,未覆盖方法:SuppressWarnings
 - `HealthPlanController`:覆盖 17/18,未覆盖方法:SuppressWarnings
+- `MembershipController`:覆盖 4/18,未覆盖方法:getAllLevels、getMyMembership、getUpgradeRecords、upgradeOrder、activateTrial、createOrder、purchasePlan、continueOrder、getPricingPlans、getMembershipCompare
 - `TaskController`:覆盖 8/18,未覆盖方法:getMinigameOptions、getTodayTasks、startTask、getTodayParentTasks、completeParentTask、deleteTask、completeMinigameTask、batchComplete、batchDelete、getMyPendingTasks
 - `TaskController`:覆盖 8/18,未覆盖方法:getMinigameOptions、getTodayTasks、startTask、getTodayParentTasks、completeParentTask、deleteTask、completeMinigameTask、batchComplete、batchDelete、getMyPendingTasks
 - `ArticleController`:覆盖 6/17,未覆盖方法:relatedProducts、related、relatedByProduct、getArticleAudio、reportReadingTime、readingStats、dailyTip、aiQuestions、submitAnswers、myPosts
 - `ArticleController`:覆盖 6/17,未覆盖方法:relatedProducts、related、relatedByProduct、getArticleAudio、reportReadingTime、readingStats、dailyTip、aiQuestions、submitAnswers、myPosts
 - `FamilyUserController`:覆盖 3/17,未覆盖方法:getUserInfo、updateUserInfo、joinFamily、createFamily、switchMode、switchToFamilyMember、switchBackToParent、switchBackVerify、getFamilyMemberren、updateFamilyMember
 - `FamilyUserController`:覆盖 3/17,未覆盖方法:getUserInfo、updateUserInfo、joinFamily、createFamily、switchMode、switchToFamilyMember、switchBackToParent、switchBackVerify、getFamilyMemberren、updateFamilyMember
 - `GuideManagementController`:覆盖 3/17,未覆盖方法:resubmitApplication、getUserApplications、getApplicationRecords、generateInviteCode、getInviteCodes、validateInviteCode、getChildGuides、getAllChildGuides、getParentGuide、getGuidePackageTemplates
 - `GuideManagementController`:覆盖 3/17,未覆盖方法:resubmitApplication、getUserApplications、getApplicationRecords、generateInviteCode、getInviteCodes、validateInviteCode、getChildGuides、getAllChildGuides、getParentGuide、getGuidePackageTemplates
-- `MembershipController`:覆盖 4/17,未覆盖方法:getAllLevels、getMyMembership、getUpgradeRecords、upgradeOrder、activateTrial、createOrder、continueOrder、getPricingPlans、getMembershipCompare、paymentNotify
 - `CircleController`:覆盖 1/16,未覆盖方法:myCircles、discover、join、leave、create、update、pendingMembers、approve、feed、multiFeed
 - `CircleController`:覆盖 1/16,未覆盖方法:myCircles、discover、join、leave、create、update、pendingMembers、approve、feed、multiFeed
 - `FamilyInviteController`:覆盖 2/15,未覆盖方法:generateQrCode、requestJoinByCode、approveJoinRequest、rejectJoinRequest、getPendingRequests、getMyRequest、cancelJoinRequest、validateFamilyCode、bindFamilyInviter、acceptInvite
 - `FamilyInviteController`:覆盖 2/15,未覆盖方法:generateQrCode、requestJoinByCode、approveJoinRequest、rejectJoinRequest、getPendingRequests、getMyRequest、cancelJoinRequest、validateFamilyCode、bindFamilyInviter、acceptInvite
 - `ReportParserAdminController`:覆盖 3/15,未覆盖方法:toggleType、deleteType、listFingerprints、saveFingerprint、deleteFingerprint、listImports、uploadImport、approveImport、rejectImport、listClusters
 - `ReportParserAdminController`:覆盖 3/15,未覆盖方法:toggleType、deleteType、listFingerprints、saveFingerprint、deleteFingerprint、listImports、uploadImport、approveImport、rejectImport、listClusters