Просмотр исходного кода

test(R191): 测试负责人闭环 — 后端全量实跑 386 类/3315 例 + 5 契约类补验 + B-95 销号

- 后端全量 `mvn -o -B clean test` 1:01h → 386 类/3315 例/3232 过/73F+6E+4S=97.50%
  386/386 XML 无沉默、2121 main + 392 test 源 0 编译错、dump 0
- 收尾增量(远端 5ad781a00):S-cfc-199/200 三类 52 例 → 39 红(TDD 前瞻)
- 窗口本地:S-cfc-197 AdminReportParserManage 37/37 GREEN;S-cfc-198 13 例 6 红(重试/分批/角色门禁未实现)
- 浏览器 39 过 + 2 跳:本机 28、189 admin 5/5(blob 4703d73fb 同源)、204 fe 6/6(连续 2 轮 → B-95 销号)
- langgraph@251 47/51:4 红全 429 AgnesAI + 401 api key ****ab12 invalid(环境)
- 线上 API 32 例 25/0/7;anon 6 端点 6/6=401;web 116/116;fe 609/3/12;根级 7/16
- 全站 4254 例 / 4088 过 = 96.10%(剔 skip 96.67%;剔预期 RED 98.34%),红 141 零缺陷回归
- 新增 B-191-1(窗口多次推入契约类→双 fetch+增量 SOP)、B-191-2(全量 1:01h,慢类 493.97s)、B-191-3(API 例数不可复现)
- 门禁:不通过(有条件)— G1/G2/G7/G9/G11 ❌;G4/G5/G6/G8/G10/G12/G13 ✅(存量零漂移第 26 次)
E2E Test Bot 45 минут назад
Родитель
Сommit
686d3e53de

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

@@ -0,0 +1,80 @@
+# R191 轮研发通知(2026-11-13)
+
+## 状态摘要
+
+| 项目 | 内容 |
+|------|------|
+| 汇报轮次 | **R191**(2026-11-13 13:14~14:35) |
+| 基线 → 收尾 | `309fa0220`(R190 后)→ 跑测中 `123f768c7` → 收尾 `5ad781a00`(+11 提交,含 S-cfc-199/200 三个契约类) |
+| 全站覆盖率 | 4254 例 / 4088 过 / 141 红 / 25 跳 = **96.10%**(剔 skip 96.67%;**剔全部预期 RED 98.34%**) |
+| 零回归确认 | ✅ 后端存量 13 类逐类零漂移(**第 26 次**);浏览器任务级全绿(本机 4 组 + 189 + 204);API 0 红;web/fe 零漂移 |
+| **本轮正向项** | **后端恢复全量实跑**(386 类 3315 例,386/386 XML 无沉默、0 编译错、dump 0);**S-cfc-197 37/37 GREEN**;**B-95 销号**(204 连续 2 轮 fe 6/6) |
+| **本轮回退项** | langgraph 50/51 → **47/51**(429 免费额度耗尽 + 401 `****ab12` invalid,环境型);G1 97.22% → 96.10%(红 +45 前瞻契约 +3 环境 −1 装置) |
+| 主要阻塞 | ① **CI 清单漏拦扩至 18 类 / 陈旧 26 类**(P0);② **251 上游 key 失效 + 配额耗尽**(P0);③ 前瞻契约 RED 94 例待实现(P1);④ 全量耗时劣化至 1:01h(P1) |
+
+---
+
+## 一、优先级事项(⏰ 按序处理)
+
+### P0-1 · CI `BACKEND_OBSERVED_CLASSES` 双向失真扩大(B-152-1/2 第 22 轮)
+
+- **现象**:`.gitlab-ci.yml:61` 清单 **33 类** vs 本轮实测红类 **25 类** → **漏拦 18 类**(R190 为 6 类)+ **陈旧 26 类**(早已全绿仍被排除)。
+- **新增漏拦(本轮窗口新增契约类)**:`AdminKnowledgeBaseManageContractTest`、`FamilyAutoCreateForPurchaseContractTest`、`GuideFamilyTaskReviewContractTest`、`NutritionPlanTeacherContractTest`、`PlanContentSafetyReviewContractTest`、`TeacherAppointmentGuardContractTest`、`TeacherAssessmentRecordContractTest`、`TeacherDataIsolationScT13ContractTest`、`TeacherDimensionScoreContractTest`、`TeacherFamilyOverviewContractTest`、`TeacherMindRecordContractTest`、`TeacherPlanCreateContractTest`,以及 `TeamProfitCronContractTest` / `UserServiceWechatLoginTest` / `UserServiceWechatLoginContractTest` / `GrowthPublicEndpointMappingTest` / `MembershipPlanPurchaseContractTest` / `TaskReviewScP11ContractTest`。
+- **后果**:`backend-blocking-junit` 在含红例分支上**必然失败**(红因不准),同时 26 个已绿类失去回归守护。
+- **行动**:用实测 25 类重写清单;建议加一步「跑后比对 surefire 红类与清单,差异即 fail 并输出差集」。
+
+### P0-2 · 251 langgraph 上游 LLM 双故障(401 凭据失效 + 429 配额耗尽)
+
+- **现象**:pytest **47/51**,4 红全 `test_auto_tag`;日志 `429 You've reached the API rate limit for free users (AgnesAI)` ×3、`401 Authentication Fails, Your api key: ****ab12 is invalid` ×5(`chat_graph.py:148/195`)。同实例 `/health` **200/2.07ms**,但 `/api/v1/chat` **000/40.0s/0B**、`/api/v1/analyze` **000/50.0s/0B**。
+- **判别**:节点 `cfc-langgraph` 与本地 HEAD **零 diff**、窗口源码零变更 → 非代码回归。
+- **行动**:更换有效 key 并升级配额;`intent_classifier.py:62` 的「429 后默认 chat」请改为显式降级并打指标(当前会把配额故障伪装成分类错误)。
+
+### P1-1 · 前瞻契约 RED 94 例(12 类)待实现
+
+| 契约类 | 关联键 | 例数 | 红 | 缺口要点 |
+|---|---|---|---|---|
+| `AdminKnowledgeBaseManageContractTest` | **S-cfc-198** `admin.knowledgeBase.manage` | 13 | **6** | ① 同步失败**重试**(无 `maxRetries`/`syncWithRetry`/`@Retryable`);② 大批量**分批**(无 `syncBatch`/`BATCH_SIZE`);③ `KnowledgeBaseController`/`KnowledgeBaseVectorController` **无平台角色门禁**(`AdminUnifiedKnowledgeController` 已有 `allowed`,应对齐) |
+| `SupplierManageAdminContractTest` | **S-cfc-200** | 19 | **16** | 410 废弃壳 / 边界门禁 / role 守卫;SC-A-06 停用在售商品守卫未落地 |
+| `AdminSupplierManageContractTest` | **S-cfc-200** | 16 | **10** | 同上(AdminSupplier/EcomSupplier 410 桩) |
+| `DimensionConfigAdminContractTest` | **S-cfc-199** `admin.dimension.config` | 17 | **13** | 维度/权重/上限 CRUD + 来源比例/归因权重治理 |
+| `TeacherMindRecordContractTest` | 承袭 | 12 | 12 | 心灵记录域未实现 |
+| `TeacherAppointmentGuardContractTest` | 承袭 | 10 | 10 | 预约守卫 |
+| `PlanContentSafetyReview` / `FamilyAutoCreateForPurchase` / `TeacherDataIsolationScT13` / `TeacherPlanCreate` | S-cfc-183/188/…/196 | 4×4 | 16 | 内容安全审核 / 购买自动建家庭 / 跨班数据隔离 / 规划师建计划 |
+| `TeacherAssessmentRecord` / `NutritionPlanTeacher` / `TeacherDimensionScore` / `GuideFamilyTaskReview` / `TeacherFamilyOverview` | 承袭 | 3/3/2/2/1 | 11 | 见 R189/R190 通知 |
+
+> **已 GREEN 可收尾**:`AdminReportParserManageContractTest`(**S-cfc-197** `admin.reportParser.manage`,**37/37**);S-cfc-182(14/14,R190);S-cfc-189/191(R189)。
+
+### P1-2 · 后端全量耗时劣化至 1:01h(B-191-2 新增)
+
+- **现象**:同源码 R188 为 43:15,本轮 **1:01h(+41%)**;慢类 `ArticleCategoryControllerTest` **493.97s**(单类 8min)、`AdminFamilyOverviewControllerTest` 341.2s、`GrowthPublicEndpointMappingTest` 334.2s、`GrowthRecordSyncFlowTest` 280.7s、`PlannerBindInviteFlowTest` 178.1s(前 5 占 ~45%)。`cfc-scheduler` 日志 **20524/73287 = 28.0%**。
+- **根因**:controller 层 `@SpringBootTest` 全上下文 + `src/test/resources` 缺 `application-test.yml`(每类重跑 `DatabaseInitializer` 全量迁移)+ `@EnableScheduling` 测试态常驻 + B-156-1/B-170-1 两条迁移语法错致建表反复失败。
+- **行动**:① 增设 `src/test/resources/application-test.yml`(禁调度、共享 datasource);② 慢类改 `@WebMvcTest + @MockBean`;③ 先修两条迁移 DDL(B-156-1 `schema.sql:5354` 索引列缺失、B-170-1 `DatabaseInitializer.java:2261` 别名 UPDATE 派生表引用)。
+
+### P1-3 · 存量装置/数据红 24 例(13 类,零漂移第 26 次)
+
+`EnergySystemFlowTest` 6F / `GrowthPublicEndpointMappingTest` 5E(**文件仍 `??` 未入库**,B-162-1)/ `DimensionRegistryMapContractTest` 3F / `OrchestrationEngine`·`OrchestrationIntegration`·`MembershipPaySwitch`·`PaymentServiceORDRouting`·`TeamProfitCron`·`UserServiceWechatLogin`·`UserServiceWechatLoginContract`·`GuideModuleIntegration`(1E)·`MembershipPlanPurchase`·`TaskReviewScP11` 各 1。
+> `TaskReviewScP11` 本轮 1F(R190 为 2F)→ B-178-1 反射装置无规则浮动,建议 `@MockBean` 替代 `ReflectionUtils`。
+
+### P2 · 其余(承袭)
+
+- **B-177-1(第 13 轮)**:pytest 打印 summary 后进程存活 4m33s、`EXIT=` 不落盘 → 请补 `await client.aclose()` shutdown;派发器已拟加 `timeout -k 10 900`。
+- **B-189-1(第 2 轮)**:git SSH 22 CLOSED,本轮 fetch/push 均走 HTTP 兜底。
+- **B-36(第 75 轮)**:根级 16 红全 `fetch failed`(本机 9082 未起)。
+- **B-DX-1(第 33 轮)**:dx 两端点 404(规格「仅登记不实现」),2 skip 正确。
+- **B-191-3**:线上 API 套件首跑 26 例/5.4min、二次 32 例/18.2s → 采集侧口径问题,不影响研制结论(以 32 例为准)。
+
+---
+
+## 二、SRS / 用例变更闸门
+
+- 窗口 `309fa0220..5ad781a00`:`docs/superpowers/specs`(201 份)/ `tests/test-cases`(16 份)/ `tests/user-scenarios`(11 份)/ `API_REFERENCE.md` **零变更** → **测试侧无需新增或修改用例**(G12 ✅)。
+- 窗口内并行会话新增 **5 个契约测试类(102 例)**,本轮已逐类实测取证(37 绿 / 6+39 预期红),未出现「推入未验证」遗漏。
+
+---
+
+## 三、请研发确认/回复
+
+1. CI 清单重写(P0-1)排期?
+2. 251 上游 key 与配额恢复(P0-2)责任人与时间?
+3. S-cfc-198 三项缺口(重试/分批/角色门禁)是否纳入本迭代?
+4. `application-test.yml` + 慢类改造(P1-2)是否可由测试侧提案 PR?

+ 377 - 0
docs/tdd/orchestration/report-test-2026-11-13-R191.md

@@ -0,0 +1,377 @@
+# 测试负责人工作汇报(R191 轮)
+
+> 本汇报按《测试负责人工作汇报模板》填写。R191 为**后端全量实跑轮**(R189/R190 均为采信,按纪律必须实跑):基线起点 `cfclub @ 309fa0220`(R190 收口 12:35 之后),跑测窗口内并行会话把 HEAD 推进至 `123f768c7`(含 S-cfc-197 契约类),收尾经 HTTP 兜底 fetch 后快进至 **`5ad781a00`**(含 S-cfc-199 / S-cfc-200 三个契约类)。
+> **拓扑(用户指令)**:浏览器经 `http://cfc.iwintrue.com/admin`(后台)+ `http://cfc.iwintrue.com/frontend`(小程序);189 / 204 / 本机为浏览器节点(**每节点仅 1 个浏览器任务**,本机四个套件串行);langgraph 部署 251 → **本轮已实派并实跑**。
+> **★ 本轮关键事实**
+> ① 后端**恢复全量实跑**:`mvn -o -B clean test` **1:01h** → **386 类 / 3315 例 / 3232 过 / 73F+6E+4S = 97.50%(剔 skip 97.62%)**;386/386 XML 无沉默、2121 主源 + 392 测试源 0 编译错、dump 0。
+> ② **窗口与收尾两次新增契约类均已逐类实测取证**:本地窗口 S-cfc-197 `AdminReportParserManageContractTest` **37/37 GREEN** + S-cfc-198 `AdminKnowledgeBaseManageContractTest` **13 例 6 红/7 绿(预期 RED)**;收尾远端推入 S-cfc-199/200 三类 **52 例 39 红/13 绿(TDD 前瞻 RED)**。
+> ③ **存量红零漂移第 26 次**:13 类 / 24 红,与 R190 的 13 类逐类一致(唯一 −1 例为 `TaskReviewScP11ContractTest` 装置浮动 2F→1F)。
+> ④ **langgraph@251 4 红全为环境**:`429 AgnesAI 免费额度耗尽` + `401 api key ****ab12 invalid`;live `/health` 200/2ms 但 `/api/v1/chat` **000/40s**、`/api/v1/analyze` **000/50s** → B-142-2 复发 + B-186-1 延续。
+> ⑤ **浏览器任务级全绿**:本机四件套 28/28 + 跨节点 189 admin **5/5** + 204 fe **6/6(连续 2 轮,B-95 可销号)**;dx 2 跳承袭(B-DX-1)。
+> ★ **全站可比:4254 例 / 4088 过 = 96.10%(剔 skip 96.67%),红 141**。红数环比 +47 **全部为 TDD 前瞻契约 RED(+45:S-cfc-198 6 + 远端三类 39)与上游环境红(langgraph +3)**,**零缺陷回归**;剔除全部预期 RED 后为 **98.34%**。
+
+---
+
+## 基本信息
+
+| 项目 | 内容 |
+|------|------|
+| 汇报人 | 测试负责人(自动化测试闭环任务 / 软件测试专家团·陆谨) |
+| 汇报周期 | 2026年11月13日 13:14 ~ 14:35(第 191 轮) |
+| 基线 | 起点 `cfclub @ 309fa0220`(=origin);跑测中推进 `123f768c7`;收尾 ff 至 **`5ad781a00`**(13:14 → 14:35 窗口) |
+| 窗口内需求变更 | **零** — `docs/superpowers/specs`(201 份)/ `tests/test-cases`(16 份)/ `tests/user-scenarios`(11 份)/ `API_REFERENCE.md` 窗口内 `git diff` 命中 0 → **G12 ✅,未触发用例编写闸门(我无需新增/改用例)** |
+| 窗口内源码变更 | **零功能源码** — `cfc-backend/src/main`、`cfc-frontend`、`cfc-langgraph` 窗口 diff 命中 0;唯一变更为**测试契约类 5 个**(S-cfc-197/198/199/200)+ cfc-web 版本号 bump + docs |
+| 负责模块/单元 | 全站:管理端 admin@本机 + 189 · 小程序 H5 fe@本机 + 204 · cfc-langgraph@251(实派) · cfc-backend JUnit(**全量实跑 + 收尾增量复验**) · cfc-web/cfc-frontend Jest · 线上 API 非功能层 |
+
+---
+
+## 一、本轮工作数据汇总
+
+### 1.1 测试用例建设
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **本轮新增测试用例数\*** | **0 个(由我新增);并行会话 +102 例(本地窗口 50 + 收尾远端 52)** | SRS/场景/接口文档窗口零变更 → 未触发用例编写闸门(G12 ✅);窗口内并行会话新增 5 个契约测试类(S-cfc-197 37 例 / S-cfc-198 13 例 / S-cfc-199 17 例 / S-cfc-200 16+19 例),**全部本轮逐类实测取证**,未出现 B-189-2 式「推入未验证」 |
+| **本轮验证执行测试数\*** | **4254 个** | 后端 **3367**(全量实跑 3315 + 收尾增量 52)+ 前端 Jest 740(fe 624 + web 116)+ langgraph 51(**251 实派**)+ 浏览器 41(39 过 + dx 2 跳)+ 线上 API 32 + 根级 23 |
+| **用例通过率** | **96.10%**(4088/4254;剔除 skip **96.67%**) | 红 141 / 跳 25;环比 R190(97.22%)−1.12pct,**红数 +47 全为 TDD 前瞻契约 RED(+45)+ 上游环境红(langgraph +3)+ 装置浮动(−1)**;**剔除全部预期 RED 后 98.34%**,零缺陷回归 |
+| **用例台账** | `tests/test-cases` 16 份 / 表行 **1168** / 唯一 TC **618** | 严格锚点(tests JS/TS/py 排除 generated ∪ Java 测试)**153**;双向命中 **106 = 17.2%**;孤儿锚点 47 / 台账空转 512 |
+
+### 1.2 会话与任务分发
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **分派任务数\*** | **8 个** | R191-1 本机 `admin-desktop`(5/5)+ `frontend-mobile`(6/6)+ `shop-api`(4/4)+ `health`(13/13,串行);R191-2 **189** `admin-desktop`(5/5);R191-3 **204** `frontend-mobile`(6/6);R191-4 **251** `langgraph pytest`(**47/51**,134.17s)+ live 三端点;R191-5 cfc-web Jest(116/116);R191-6 cfc-frontend Jest(609/3/12);R191-7 根级 Jest(7/16);R191-8 线上 API 非功能(25/0/7)+ 收尾增量 3 契约类(13/39) |
+| **恢复智能体会话数\*** | 0 个 | 各节点实探:`189:4090`=200、`204:4091`=200、`251:4096`=200、`251:9000`=404(根)/health 200、本机 4091=OPEN;未遇中断会话 |
+| **当前在用会话数** | 0 个 | 全部结束;251 残留 pytest 进程(2 个,存活 4m33s)已 `kill -9` 清理并 `ps` 复核 0 |
+
+### 1.2b 各会话当前工作状态列表
+
+| 会话标签 | 会话 ID/地址 | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
+|----------|--------------|----------|----------|---------------|----------|------|
+| `local-admin` | 本机 Playwright | done | admin-desktop UI E2E | 1.4m | `d:\cfc\tests` | **5/5**;TC-A-U01~U05 全过(U05 55.3s) |
+| `local-frontend` | 本机 Playwright | done | frontend-mobile UI E2E | 1.9m | `d:\cfc\tests` | **6/6**;B-185 维持消除 |
+| `local-shop` | 本机 Playwright | done | shop-sort API E2E | 9.7s | `d:\cfc\tests` | **4/4** |
+| `local-health` | 本机 Playwright | done | health 鉴权契约 E2E | 5.5s | `d:\cfc\tests` | **13/13**(TC-HP-U01~03 全 401) |
+| `remote-189` | 192.168.16.189:4090 | done | admin-desktop UI E2E | 1.3m | `C:\code\cfc\tests` | **5/5**;HEAD `8524533c8`,spec blob `4703d73fb`=本机 → 可比 |
+| `remote-204` | 192.168.16.204:4091 | done | frontend-mobile UI E2E | 44.7s | `D:\cfc\tests` | **6/6(连续 2 轮)**→ B-95 可销号 |
+| `remote-251` | 192.168.16.251:4096 | done | langgraph pytest + live 探针 | 134.17s | `/sc-data/cfc/cfc-langgraph` | **47/51**;4 红全 429/401 环境;node HEAD `563e6c62d`,`cfc-langgraph` 与本地零 diff |
+| `local-jest` | 本机进程 | done | cfc-web + cfc-frontend + 根级 | web 124s / fe 66s / root 7s | `cfc-web` / `cfc-frontend` / `tests` | web **116/116**、fe **609/3/12**(3 预期 RED)、根级 **7/16**(B-36) |
+| `local-backend` | 本机 mvn | done | **后端全量 386 类** + 收尾增量 3 类 | 1:01h + 2m43s | `d:\cfc\cfc-backend` | 全量 3315(3232/79/4)+ 增量 52(13/39) |
+| `virtual` | dx-bridge | done | D/X 桥接鉴权契约 | 瞬时 | `d:\cfc\tests` | **2 skip**(端点 404,B-DX-1 第 33 轮) |
+
+### 1.3 问题处置
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **新测试发现问题数\*** | **3 个** | ① **B-191-1(P1 流程/证据)**:跑测窗口内远端连续推入 **3 个契约类**(`AdminSupplierManageContractTest` 16 例 10F、`SupplierManageAdminContractTest` 19 例 16F、`DimensionConfigAdminContractTest` 17 例 13F),若不做收尾 fetch + 增量复验,会把 39 例 TDD-RED 当作「未覆盖」或把后续轮次误判为回归 → 本轮已增量复验并计入;② **B-191-2(P1 装置/性能)**:后端全量 **1:01h**(R188 同源码 43:15),慢类 `ArticleCategoryControllerTest` **493.97s**、`AdminFamilyOverviewControllerTest` 341.2s、`GrowthPublicEndpointMappingTest` 334.2s、`GrowthRecordSyncFlowTest` 280.7s、`PlannerBindInviteFlowTest` 178.1s;`cfc-scheduler` 日志 **20524/73287 = 28.0%** → B-152-3 复现;③ **B-191-3(P2 工具/度量)**:线上 API 套件首跑仅 **26 例(19 过 + 7 跳)/5.4min**,二次同命令 **32 例(25 过 + 7 跳)/18.2s** → 首跑口径不完整,报告例数须以「`Running N tests` + summary 例数 = 点名例数」双校验 |
+| **已解决测试相关问题数\*** | **2 个** | ① **B-95 销号(204 节点)**:204 fe **6/6 连续 2 轮**(R190 46.1s + R191 44.7s),满足连续 2 轮判据;② **S-cfc-197 GREEN 确认**:`AdminReportParserManageContractTest` **37/37** 全绿 → 能力键 `admin.reportParser.manage` 实现已落地,可直接转 GREEN(前提:研发侧 `--mark-yellow`/`--mark-green` 登记) |
+| **待解决测试相关问题数** | P0×2 / P1×9 / P2×4 | ① B-152-1/2 CI 清单**漏拦扩至 18 / 陈旧 26**;② **TDD 前瞻契约 RED 94 例(12 类)**待研发实现;③ 存量装置/数据红 24 例(13 类);④ B-177-1 pytest 进程不退出(第 13 轮);⑤ B-156-1/B-170-1 迁移 DDL;⑥ B-162-1 未入库测试类;⑦ B-178-1 反射装置浮动;⑧ B-36 根级 16 红(9082 未起);⑨ B-DX-1 dx 404;⑫ **B-142-2 复发(429/401 上游)**;⑬ B-186-1 live chat/analyze 挂死;⑭ **B-189-1 git SSH 22 仍故障**;⑮ B-191-2 全量耗时劣化 |
+
+### 1.4 本轮 git 提交与推送证据(真理证据)
+
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
+|----------|-----------------|------|--------------|----------|------------|------|
+| `(本轮)` | 全站巡检 R191 + 后端全量实跑 + 5 契约类补验 + B-191-1/2/3 + B-95 销号 + S-cfc-197 GREEN | 汇报 | 报告 + 执行日志 + blockers + 研发通知 + 台账 | cfclub | ✅ 推送 `http://git.iwintrue.com/liaoxg/cfc.git`(**SSH 22 仍故障,B-189-1 第 2 轮 HTTP 兜底**) | 结果有变化 → 已提交并通知研发 |
+
+### 1.5 状态机阶段分布(全局进度,研发侧账本口径)
+
+| 阶段 | 键数 | 备注 |
+|------|------|------|
+| RED | 窗口新增 **5 个契约类**(S-cfc-197 已全绿可转 YELLOW/GREEN;S-cfc-198/199/200 为本轮 TDD-RED 前瞻) | 研发状态机口径另计(`sc-key-map.md` 窗口 3 次回填,241/241 全映射达成) |
+| YELLOW | 承袭 | 待研发 `--mark-yellow` 登记 |
+| GREEN | S-cfc-197(**本轮实测 37/37**);S-cfc-182(R190 14/14) | 测试侧已取证 |
+
+### 1.6 数据源健康度
+
+| 数据源 | 读取键数 | 是否正常 | 备注 |
+|--------|----------|----------|------|
+| 需求侧(⏳ wish) | 0 | 正常 | SRS 目标池未启用;specs 201 份可读 |
+| 契约常量(contract) | 5 类新增 | 正常 | S-cfc-197/198/199/200 全部可收集可执行 |
+| 测试用例引用(test_case_map) | 618 唯一 TC | 正常 | 台账扫描正常(表行 1168) |
+| 执行结果回填(case_results) | 全量 386 XML + 增量 3 XML | 正常 | 386/386 无沉默,dump 0 |
+
+---
+
+## 二、历史审查记录(阶段 -1 记忆召回)
+
+| 项 | 内容 |
+|---|---|
+| 上次审查 | **R190(2026-11-13 12:35,`0e6f285da`)**,结论「不通过(承袭,无回归、正向项明确)」,全站 4141/4026(97.22%),红 94;后端采信 R189;langgraph 50/51;204 节点恢复 |
+| 历史遗留 | 后端存量 25 红(13 类)· 根级 16 红(B-36)· fe 3 预期 RED(S-cfc-132/133)· CI 漏拦/陈旧(B-152-1/2)· B-177-1 · B-178-1 · B-186-1 · B-189-1 |
+| 本次是否改善 | **后端由采信转全量实跑(386 类 3315 例,零沉默零编译错)**;**B-95 销号(204 连续 2 轮 6/6)**;**S-cfc-197 37/37 GREEN**;存量 13 类逐类零漂移;浏览器六件套任务级全绿 |
+| 本次是否回退 | **langgraph 50/51 → 47/51(−3)**:4 红全为 `test_auto_tag`,日志 `429 AgnesAI 免费额度耗尽` ×3 + `401 api key ****ab12 invalid` ×5 → **上游凭据/配额环境型**(节点 `cfc-langgraph` 与本地零 diff、窗口源码零变更)→ 非代码回归;**G1 97.22% → 96.10%**(红 +47 全为 TDD 前瞻契约 RED 45 + 环境红 3 − 装置浮动 1) |
+| 教训应用 | ①「采信不得超过 2 轮」→ 本轮强制全量实跑(R189/R190 均采信);② 收尾**两次** fetch(提交前 + 推送前)→ 本轮第二次抓到远端 3 个新契约类并增量复验(B-191-1);③ 绝不用「类/分钟」外推或提前 kill(R188 教训):本轮前半程 31 类/22min 仍耐心等完,最终 1:01h 自然收口;④ 远程派发用 `setsid nohup` 分离 + 单次读,不在等待期建 shell(B-125);⑤ 上游 401/429 与代码回归用「节点源码零 diff + 窗口源码零变更」判别(B-142-2 判别式) |
+
+> 本次为该对象**第 191 次**审查,有历史记录;上述内容仅作对照,**本轮全站所有维度均为本轮实测**(后端全量 + 5 契约类定向 + 浏览器三节点 + langgraph 251 实派 + Jest 三套 + 线上 API),无承袭项。
+
+---
+
+## 三、项目画像与覆盖矩阵
+
+### 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`(366 控制器 / 395 测试源 / 386 执行类)/ `cfc-frontend`(42 测试文件 / 624 例)/ `cfc-web`(17 套件 / 116 例)/ `cfc-langgraph`(51 例 @251)/ `tests`(e2e-live 5 文件 + e2e/api 点名 4 文件) |
+| 关键路径 | 登录/家庭/成员 → 五维能量 → 任务/成长记录 → 健康报告上传解析 → 测评订单 → 商城/支付 → AI 对话(LangGraph) |
+| 测试现状 | **本轮全实测**:后端全量 3315 + 增量 52 + fe 624 + web 116 + langgraph 51 + 浏览器 41 + API 32 + 根级 23 = **4254 例** |
+| 质量目标 | 全量用例全绿、覆盖 SRS 与用户场景(含异常流)、浏览器双节点可复现、结果变更即提交并通知研发 |
+| 风险点 | ① 后端 TDD 前瞻契约 RED 94 例(12 类)待实现;② 存量装置/数据红 24 例(13 类);③ CI 清单双向失真(**漏拦 18 / 陈旧 26**);④ 上游 LLM 凭据 + 配额双故障(429/401,live chat/analyze 挂死);⑤ 根级 16 红(9082 未起);⑥ 迁移 DDL 缺陷(B-156-1/B-170-1);⑦ pytest 进程不退出(B-177-1);⑧ 全量耗时劣化至 1:01h(B-191-2);⑨ git SSH 22 故障(B-189-1) |
+| 待核实项 | S-cfc-176 幂等分支排期 · 251 上游 key 更换(****ab12)与配额 · 204 销号后续稳定性 · B-156-1/B-170-1 修复状态 · S-cfc-186 跨家庭 IDOR 研发排期 · S-cfc-198 三项缺口(重试/分批/角色门禁)排期 |
+
+### 3.2 20 类测试覆盖矩阵(全类不省略)
+
+| # | 测试类型 | 三态 | 证据(本轮实测) |
+|---|----------|------|------------------|
+| 1 | 单元测试 | ✅ 已发现 | 后端全量 386 类 3315 例(**本轮实跑**)+ 增量 3 类 52 例;前端 624;管理端 116 |
+| 2 | 测试覆盖率 | ⚠️ 部分 | 管理端 Jest 覆盖率可产出(Lines 未变);后端未开 jacoco(未授权改 pom) |
+| 3 | 变异测试 | ❌ 未发现 | 全仓无 pitest/mutation 配置(扫描 0 命中) |
+| 4 | 集成测试 | ✅ 已发现 | `integration/*` **本轮实跑**:EnergySystemFlowTest 6F、GuideModuleIntegrationTest 1E、DailyCheckinStreakFlowTest 6/6、AdminFamilyOverview 341s 全绿等 |
+| 5 | 契约测试 | ✅ 已发现(本轮重点) | 5 类全实测:S-cfc-197 **37/37 GREEN**、S-cfc-198 **13(6F/7绿)**、S-cfc-199 **17(13F/4绿)**、S-cfc-200 **35(26F/9绿)**;历史契约窗 12 类 94 红承袭 |
+| 6 | 接口 API 测试 | ✅ 已发现 | 线上 API 32 例(本轮实测:**25 过 / 7 跳 / 0 红,18.2s**;首跑 26 例异常见 B-191-3) |
+| 7 | 系统/端到端 | ✅ 已发现 | 浏览器 41 例(**39 过 + 2 跳**):admin 5(本机+189)、fe 6(本机+204)、shop 4、health 13 |
+| 8 | 验收 UAT | ⚠️ 待核实 | 无独立 UAT 包;以浏览器 39 例作为系统级验收代理 |
+| 9 | BDD 规格 | ✅ 已发现 | 用户场景 11 份 / SC 唯一 244;被台账引用 152 = **62.3%** |
+| 10 | 冒烟测试 | ✅ 已发现 | `api-smoke.spec.js` 本轮全绿(含自注册链路) |
+| 11 | 回归测试 | ✅ 已发现 | 存量 13 类逐类零漂移(**第 26 次**);浏览器/fe/web/API 全绿或零漂移 |
+| 12 | 探索性测试 | ⚠️ 部分 | 历轮浏览器人工探索记录;本轮未安排新探索项 |
+| 13 | 性能测试 | ❌ 未实测 | 未授权联网压测;仅 API 时延观察 + 后端耗时画像(B-191-2 493.97s 单类) |
+| 14 | 可靠性测试 | ⚠️ 部分 | **B-177-1 第 13 轮复现**:summary 打印后进程存活 4m33s(`Sl`),`EXIT=` 永不落盘;pytest 本身 134.17s 正常收口 |
+| 15 | 安全测试 | ✅ 已发现 | `nonfunc-security.spec.js` 11 例本轮全绿;匿名 6 端点 **6/6 = 401** |
+| 16 | 兼容性测试 | ⚠️ 部分 | 双视口(desktop 1440 / mobile 375)实测通过;无多浏览器矩阵 |
+| 17 | 可用性测试 | ⚠️ 部分 | 登录-主框架-核心菜单旅程 5/5 × 2 节点;无专项可用性问卷 |
+| 18 | 无障碍测试 | ❌ 未发现 | 无 axe/pa11y 配置 |
+| 19 | QA 流程 | ⚠️ 部分 | 汇报/台账/blockers 闭环在跑;**CI 清单漏拦扩至 18**(B-152-1/2 第 22 轮) |
+| 20 | 质量指标 | ⚠️ 部分 | 全站 96.10%(G1 阈值 98% 未达);锚点 **17.2%**(R190 口径 20.1%,口径差异见 §附录 C) |
+
+---
+
+## 四、五要素问题清单
+
+### P1-1 后端 TDD 前瞻契约 RED 94 例(12 类)待研发实现
+
+| 要素 | 内容 |
+|---|---|
+| ① 问题描述 | 本窗口与收尾远端共推入 5 个契约类,其中 4 类为 TDD-RED 先行态,累计 **94 例红 / 12 类**(`TeacherMindRecord` 12 · `TeacherAppointmentGuard` 10 · `AdminKnowledgeBaseManage` 6 · `FamilyAutoCreateForPurchase` 4 · `PlanContentSafetyReview` 4 · `TeacherDataIsolationScT13` 4 · `TeacherPlanCreate` 4 · `NutritionPlanTeacher` 3 · `TeacherAssessmentRecord` 3 · `TeacherDimensionScore` 2 · `GuideFamilyTaskReview` 2 · `TeacherFamilyOverview` 1 · 远端三类 39 例) |
+| ② 测试 bug 点 | `AdminKnowledgeBaseManageContractTest#syncFailureRetry_syncPathShouldSupportRetry` / `#largeBatch_syncAndBackfillShouldSupportBatching` / `#permissionFlow_kbWriteEndpointsShouldEnforceRole`(断言 `expected true but was false`);`SupplierManageAdminContractTest`(19 例 16F);`DimensionConfigAdminContractTest`(17 例 13F) |
+| ③ 最优修改方案 | 研发按能力键逐项实现:① `KnowledgeBaseController` / `KnowledgeBaseVectorController` 补平台角色门禁(对齐 `AdminUnifiedKnowledgeController.allowed`);② 同步/回填路径补 `syncBatch` / `BATCH_SIZE` 分批;③ 补 `maxRetries` / `syncWithRetry` / `@Retryable` 重试;④ SC-A-06 停用在售商品守卫;⑤ 各 Teacher/成长域实现按 `sc-key-map.md` 排期 |
+| ④ 修改目的 | 恢复「契约先行」闭环:契约红 → 实现 → GREEN;当前 94 红使 G2 无法归零,且掩盖真实回归信号 |
+| ⑤ 修改后能否闭环 | 能。复测方式:`mvn -o -B test -Dtest=<类>` 逐类定向,单类 0F 且连续 2 轮 → 移出台账;契约类全绿后 `gate_evaluator` 的 G2 分母同步收缩 |
+
+### P1-2 存量装置/数据红 24 例(13 类,零漂移第 26 次)
+
+| 要素 | 内容 |
+|---|---|
+| ① 问题描述 | 13 类 24 红:`EnergySystemFlowTest` 6F、`GrowthPublicEndpointMappingTest` 5E、`DimensionRegistryMapContractTest` 3F、`OrchestrationEngineTest`/`OrchestrationIntegrationTest`/`MembershipPaySwitchTest`/`PaymentServiceORDRoutingTest`/`TeamProfitCronContractTest`/`UserServiceWechatLoginTest`/`UserServiceWechatLoginContractTest`/`GuideModuleIntegrationTest`(1E)/`MembershipPlanPurchaseContractTest`/`TaskReviewScP11ContractTest` 各 1 |
+| ② 测试 bug 点 | `TaskReviewScP11ContractTest` 2F→1F 浮动(`ReflectionUtils` 反射装置无规则,B-178-1);`GrowthPublicEndpointMappingTest` 5E 因该文件未入库(`??`,B-162-1)且 334.2s;`TeamProfitCronContractTest` 平台费截断(数据) |
+| ③ 最优修改方案 | ① B-178-1 用 `@MockBean` 替代反射注入;② B-162-1 把 `GrowthPublicEndpointMappingTest` / `JwtInterceptorGrowthPolicyTest` / `ArticleTagsContractTest` 三个 `??` 文件入库;③ `TeamProfitCron` 平台费按 `BigDecimal` 精度修正(断言侧改 `compareTo` 或实现侧改舍入) |
+| ④ 修改目的 | 消除装置噪声,使「红」只代表产品缺陷(G2/G13 可信) |
+| ⑤ 修改后能否闭环 | 能。定向复跑单类 0F 连续 2 轮 → 从 `BACKEND_OBSERVED_CLASSES` 移除 → CI 硬门禁自动收紧 |
+
+### P1-3 B-191-1 窗口内多次推入契约类,全量与收尾口径不一致(流程)
+
+| 要素 | 内容 |
+|---|---|
+| ① 问题描述 | 13:14 基线 `309fa0220`;跑测中本地 HEAD → `123f768c7`(+S-cfc-197 37 例);收尾 fetch 远端 +11 提交(`5ad781a00`,+S-cfc-199/200 三个契约类 52 例)。若只跑一次全量就定稿,会把 52 例(39 红)记为「未覆盖」 |
+| ② 测试 bug 点 | 非用例缺陷,属**取证流程缺口**:单次 fetch + 单次全量无法覆盖窗口尾部的并行提交 |
+| ③ 最优修改方案 | 固化「双 fetch + 增量定向」:提交前 fetch 一次、推送前再 fetch 一次;若 `git diff --name-only` 命中 `src/test/**` → 逐类定向复跑并计入总量;命中 `src/main/**` → 全量重跑或标「截断」 |
+| ④ 修改目的 | 保证「报告例数 = 真实覆盖率」,避免已实现资产被漏记、避免把新契约红误判为回归 |
+| ⑤ 修改后能否闭环 | 能。本轮已按此执行(52 例全部取证,39 红计入 G2 的「前瞻契约」栏);下轮起写入 SOP §阶段 4 |
+
+### P1-4 B-152-1/2 CI 清单双向失真(漏拦扩至 18 类)
+
+| 要素 | 内容 |
+|---|---|
+| ① 问题描述 | `.gitlab-ci.yml:61` `BACKEND_OBSERVED_CLASSES` 33 类 vs 实测红类 25 类 → **漏拦 18 类**(含本轮 5 个新契约类:`AdminKnowledgeBaseManage` / `FamilyAutoCreateForPurchase` / `GuideFamilyTaskReview` / `NutritionPlanTeacher` / `PlanContentSafetyReview` / `TeacherAppointmentGuard` / `TeacherAssessmentRecord` / `TeacherDataIsolationScT13` / `TeacherDimensionScore` / `TeacherFamilyOverview` / `TeacherMindRecord` / `TeacherPlanCreate` / `SupplierManageAdmin`? 等)、**陈旧 26 类**(早已全绿仍被排除) |
+| ② 测试 bug 点 | 非用例缺陷,属 CI 配置漂移;`backend-blocking-junit` job 在含红例分支上必然失败,同时对 26 个已绿类失去回归守护 |
+| ③ 最优修改方案 | 用本轮实测红类集合重写清单(25 类),并加一条 CI 步骤:`mvn test` 后自动比对 surefire 红类与清单,差异即 fail 并输出差集 |
+| ④ 修改目的 | 让硬门禁真实生效(既不漏拦红类,也不虚化 26 类的守护) |
+| ⑤ 修改后能否闭环 | 能。验证方式:在含红例分支跑一次 CI,`backend-blocking-junit` 应「必红且红因准确」 |
+
+### P1-5 B-142-2 复发 + B-186-1 live 链路挂死(上游 LLM)
+
+| 要素 | 内容 |
+|---|---|
+| ① 问题描述 | langgraph@251:pytest **47/51**,4 红全 `test_auto_tag`;日志 `429 You've reached the API rate limit for free users (AgnesAI)` ×3 + `401 Authentication Fails, Your api key: ****ab12 is invalid` ×5;同实例 `/health` 200/2.07ms,但 `/api/v1/chat` **000/40.0s/0B**、`/api/v1/analyze` **000/50.0s/0B** |
+| ② 测试 bug 点 | `app/graphs/chat_graph.py:148/195`(召回/保存记忆 401)、`app/agents/intent_classifier.py:62`(429 后 `默认 chat` 静默兜底) |
+| ③ 最优修改方案 | 运维更换有效 key 并升级配额;研发把 `intent_classifier` 的兜底改为「显式降级 + 可观测指标」;`chat_graph` 对 401 快速失败而非重试挂死 |
+| ④ 修改目的 | 使「单测绿」与「真实链路可用」不再背离(R188 曾出现 51/51 绿 + chat 120s 零字节) |
+| ⑤ 修改后能否闭环 | 能。判据:pytest 51/51 **且** live chat/analyze 200 且 p95 < 30s,连续 2 轮 |
+
+### P2-1 B-191-2 全量耗时劣化至 1:01h(装置/性能)
+
+| 要素 | 内容 |
+|---|---|
+| ① 问题描述 | 同源码 R188 43:15 → 本轮 1:01h(+41%);慢类 `ArticleCategoryControllerTest` **493.97s**、`AdminFamilyOverviewControllerTest` 341.2s、`GrowthPublicEndpointMappingTest` 334.2s、`GrowthRecordSyncFlowTest` 280.7s、`PlannerBindInviteFlowTest` 178.1s(前 5 占 ~45%);`cfc-scheduler` 日志 20524/73287 = **28.0%**、上下文启动多次 |
+| ② 测试 bug 点 | 装置层:controller 层 `@SpringBootTest` 全上下文 + `src/test/resources` 缺 `application-test.yml` → 每类重跑 `DatabaseInitializer` 全量迁移;`@EnableScheduling` 在测试态常驻 |
+| ③ 最优修改方案 | ① 增设 `src/test/resources/application-test.yml`(禁 `@EnableScheduling`、共享 datasource);② 慢类改 `@WebMvcTest + @MockBean`;③ 修 B-156-1/B-170-1 两条迁移语法错(避免 34 次建表全失败的重试开销) |
+| ④ 修改目的 | 把全量压回 ≤45min,使「每轮全量实跑」可持续(当前 1h+ 已挤压巡检预算) |
+| ⑤ 修改后能否闭环 | 能。判据:`mvn -o -B clean test` 的 `Total time` ≤ 45:00 且类数不变 |
+
+### P2-2 B-191-3 线上 API 套件首跑例数不完整(工具/度量)
+
+| 要素 | 内容 |
+|---|---|
+| ① 问题描述 | 首跑 `--reporter=line` 得 **26 例(19 过 + 7 跳)/5.4min**;二次同命令 `--reporter=list` 得 **32 例(25 过 + 7 跳)/18.2s**(与 R190 一致)。首跑 6 例未计入,且耗时高 18 倍 |
+| ② 测试 bug 点 | 无用例缺陷;属**运行口径不可复现**(疑与首次冷启动/网络抖动/`--output` 目录复用有关) |
+| ③ 最优修改方案 | 采集侧固化「双校验」:必须同时满足 `Running N tests` 的 N = 点名文件静态用例数、summary 的 pass+fail+skip = N;任一不符即重跑并记录两次口径 |
+| ④ 修改目的 | 防止「例数漂移」被当成覆盖变化(本项目已多次出现 990 vs 32 的口径问题,B-173-2) |
+| ⑤ 修改后能否闭环 | 能。本轮已用二次运行定案(32 例);下轮起把双校验写入附录命令模板 |
+
+### P2-3 B-177-1 pytest 进程不退出(第 13 轮)
+
+| 要素 | 内容 |
+|---|---|
+| ① 问题描述 | `summary` 已打印(`4 failed, 47 passed in 134.17s`)但 2 个进程存活 **4m33s**(`ps` 状态 `Sl`),`echo EXIT=$rc` 永不执行 → 日志无 `EXIT=` 行;`kill -9` 后清理干净 |
+| ② 测试 bug 点 | `app/main.py` lifespan 未 `await client.aclose()`(线索 `RuntimeWarning: coroutine 'JavaClient._get_client' was never awaited`);派发器缺超时兜底 |
+| ③ 最优修改方案 | 产品侧补 shutdown 钩子关闭 http client;派发器命令加 `timeout -k 10 900`,并以 summary 文本 + 进程存活双判据定案 |
+| ④ 修改目的 | CI 里 pytest job 不挂死(否则流水线超时) |
+| ⑤ 修改后能否闭环 | 能。判据:进程在 summary 后 ≤10s 退出且 `EXIT=0` 落盘 |
+
+### P2-4 B-189-1 git SSH 22 故障(第 2 轮)
+
+| 要素 | 内容 |
+|---|---|
+| ① 问题描述 | `git fetch origin` 走 `git@git.iwintrue.com:iwt/cfc.git` 报 `Please make sure you have the correct access rights`;改 `http://git.iwintrue.com/liaoxg/cfc.git` 后 fetch/推送均成功 |
+| ② 测试 bug 点 | 环境侧(Gogs sshd 22 端口不可用),非代码 |
+| ③ 最优修改方案 | 运维恢复 22 端口;或把 CI/自动化节点的 `origin` fetch URL 一并改为 HTTP(当前 push URL 已是 HTTP,fetch 仍 SSH) |
+| ④ 修改目的 | 保证自动化闭环的「真理证据」通道不依赖人工兜底 |
+| ⑤ 修改后能否闭环 | 能。判据:`git fetch origin` 无凭据报错且 `rev-list --left-right --count` 可算 |
+
+---
+
+## 五、域结论表
+
+| 审查维度 | 负责专家 | 结论 | 关键证据 |
+|---|---|---|---|
+| 单元·组件级(单元/覆盖率/变异) | 苏雅 | ⚠️ 部分通过 | 后端 386 类 3315 例实跑(3232 过 / 79 红 / 4 跳);386/386 XML 无沉默;覆盖率仅管理端可产出;**变异测试全仓 0 配置** |
+| 集成·接口级(集成/契约/API) | 柯砚 | ⚠️ 部分通过 | 集成域实跑(EnergySystemFlow 6F、GuideModule 1E、DailyCheckin 6/6);契约 5 类全实测(S-cfc-197 GREEN、S-cfc-198 6F、远端三类 39F);线上 API 32 例 25/0/7 |
+| 系统·验收级(E2E/UAT/BDD) | 白樾 | ✅ 通过(浏览器级) | admin 5/5(本机+189)、fe 6/6(本机+204)、shop 4/4、health 13/13;UAT 无独立包(以 39 例代理);SC 244 映射 152 = 62.3% |
+| 测试保障级(冒烟/回归/探索) | 闻朔 | ✅ 通过 | 冒烟全绿;回归零漂移第 26 次;探索性无新增章程(承袭) |
+| 性能·可靠性 | 骆骋 | ⚠️ 部分 | 全量 **1:01h**(B-191-2,慢类 493.97s);pytest 进程不退出(B-177-1 第 13 轮);未授权压测 |
+| 安全 | 关屿 | ✅ 通过(本轮实证) | 匿名 6 端点 **6/6 = 401**;`nonfunc-security` 11 例全绿;S-cfc-198 揭示知识库写入**无角色门禁**(已记 P1-1 ③) |
+| 兼容·体验 | 阮清 | ⚠️ 部分 | 双视口通过;无多浏览器矩阵;无 axe/pa11y |
+| 流程·度量·代码 | 何序 | ⚠️ 部分 | CI 漏拦 18 / 陈旧 26(G11 ❌);锚点 17.2%;`@GetMapping` 8 处仍违规范;specs 201 份、控制器 366 |
+
+---
+
+## 六、门禁结论
+
+**结论:不通过(有条件)** —— 全站 4254 例 / **4088 过 = 96.10%(剔 skip 96.67%)**,红 141。红数环比 +47 的构成:**TDD 前瞻契约 RED +45**(本地 S-cfc-198 6 + 收尾远端三类 39)、**上游环境红 +3**(langgraph 429/401)、**装置浮动 −1**(`TaskReviewScP11` 2F→1F),**零缺陷回归**;剔除全部预期 RED(97 例)后 **98.34%**。阻断项为**前瞻契约待实现 + 存量装置红 + CI 清单失真 + 上游 key/配额失效 + 全量耗时劣化**,均非本轮新增回归。
+
+| 门禁 | 判定 | 依据(本轮实测) |
+|------|------|------------------|
+| G1 全站通过率 ≥98% | ❌ **96.10%** | 4088/4254(剔 skip 96.67%,剔预期 RED 98.34%);−1.12pct 因前瞻契约 +45 与环境 +3 |
+| G2 后端红归零/契约裁决 | ❌ **118 红** | 全量 79(73F+6E)+ 增量 39 = 存量 **24(13 类)** + 前瞻契约 **94(12 类)**;存量逐类零漂移 |
+| G3 前端双绿 | ⚠️ fe 609/624(3 预期 RED)+ web **116/116**;浏览器 fe **6/6 双节点** | 3 红全为 S-cfc-132/133 未交付(AC-R1/AC-R2/AC-2 RED-A7) |
+| G4 编译可编译 | ✅ | `Compiling 2121 main + 392 test source files`,0 错(含 5 个新契约类) |
+| G5 结果完整性 | ✅ | **386/386** XML 可聚合、无沉默类;`*.dump` 0;增量 3 XML 完整 |
+| G6 浏览器 E2E | ✅ **39 过 + 2 跳** | admin 5/5(本机 1.4m + 189 1.3m)、fe 6/6(本机 1.9m + 204 44.7s)、shop 4/4(9.7s)、health 13/13(5.5s)、dx 2 跳 |
+| G7 langgraph | ❌ **47/51(92.2%)** | 4 红全 `test_auto_tag`;429 AgnesAI ×3 + 401 `****ab12` ×5;live chat 000/40s、analyze 000/50s;节点源码与本地零 diff → 环境红 |
+| G8 匿名鉴权 401 | ✅ **6/6** | mind/fortune、energy/overview、health/plan/list、xiaomi-health、huawei-health、admin/families/overview 全 **401 `请先登录`** |
+| G9 用例锚定 SRS | ❌ **17.2%** | 双向命中 106 / 台账 618;锚点 153(孤儿 47、空转 512);SC 映射 62.3% |
+| G10 节点可比 | ✅ 三节点 | 189 admin 5/5(spec blob `4703d73fb`=本机)、204 fe 6/6、251 pytest(`cfc-langgraph` 与本地零 diff)+ 本机四件套 |
+| G11 CI 硬门禁 | ❌ | 清单 33 vs 实测红 25 → **漏拦 18 / 陈旧 26**(第 22 轮未修) |
+| G12 SRS 变更驱动用例更新 | ✅ | specs 201 / test-cases 16 / 场景 11 / API_REFERENCE 窗口**零变更** → 我无需新增或改用例;窗口 5 个契约类由并行会话产出,**本轮全部补验** |
+| G13 存量红零漂移 | ✅ **第 26 次** | 13 类逐类与 R190 一致(唯一差异 `TaskReviewScP11` 2F→1F 装置浮动) |
+| G14 场景→用例映射 | ⚠️ **62.3%** | 244 SC 中 152 被台账引用 |
+
+---
+
+## 七、变更触发动作(用户规则:结果有变 → 提交远程 + 通知研发)
+
+| 项 | 内容 |
+|---|---|
+| 结果是否变化 | **是** — 后端由「采信」转全量实跑(386 类 3315 例,新增 5 契约类 102 例);langgraph 50/51→47/51;B-95 销号;S-cfc-197 GREEN;红 94→141(全为预期 RED/环境) |
+| 提交 | 本轮报告 + 执行日志 + blockers + 研发通知 + 台账(详见 §1.4) |
+| 推送 | ✅ `http://git.iwintrue.com/liaoxg/cfc.git` → `cfclub`(SSH 22 故障,HTTP 兜底第 2 轮) |
+| 通知研发 | ① 仓库 `docs/tdd/notice-2026-11-13-R191-研发通知.md`;② `docs/tdd/test/blockers.md` R191 段(P0/P1 排序);③ Agent Mail **仍不可用**(`GetMe` → `not_bound`,「请勿重试」)→ 以 ①+②+推送落地 |
+
+---
+
+## 八、待办
+
+| 优先级 | 事项 | 归属 |
+|---|---|---|
+| P0 | CI `BACKEND_OBSERVED_CLASSES` 按实测 25 类重写(漏拦 18 / 陈旧 26) | 研发/CI |
+| P0 | 251 上游 LLM key 更换(`****ab12` invalid)+ 配额升级 | 运维 |
+| P1 | 前瞻契约 RED 94 例逐键实现(S-cfc-198 重试/分批/角色门禁优先) | 研发 |
+| P1 | 存量 13 类装置红治理(`@MockBean` 替反射、3 个 `??` 测试类入库、平台费精度) | 研发/测试 |
+| P1 | 全量耗时压回 ≤45min(`application-test.yml` + 慢类拆 `@WebMvcTest`) | 测试/研发 |
+| P2 | pytest shutdown `aclose()` + 派发器 `timeout -k 10 900` | 研发/测试 |
+| P2 | git SSH 22 恢复(或把 fetch URL 一并改 HTTP) | 运维 |
+| P2 | 9082 本地起服务后复跑根级 16 红(B-36) | 测试 |
+
+---
+
+## 附录 A:本轮命令与口径(可复现)
+
+```bash
+# 环境探针(SOP 第一步)
+/d/jdk1.8.0_25/bin/java -version && JAVA_HOME=/d/jdk1.8.0_25 /d/maven/apache-maven-3.6.1/bin/mvn -v
+
+# 后端全量(工程根必须在 cfc-backend)
+cd d:/cfc/cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 /d/maven/apache-maven-3.6.1/bin/mvn -o -B clean test   # 1:01h
+# 聚合:surefire XML → 386 类 / 3315 例 / 73F+6E+4S
+
+# 收尾增量(快进 5ad781a00 后)
+mvn -o -B test -Dtest='AdminSupplierManageContractTest,SupplierManageAdminContractTest,DimensionConfigAdminContractTest'   # 52 例 / 39F
+
+# 浏览器(必须在 tests/ 内跑;每节点 1 个浏览器任务,本机串行)
+cd d:/cfc/tests
+npx playwright test --config=playwright.config.live.js --project=admin-desktop
+npx playwright test --config=playwright.config.live.js --project=frontend-mobile
+npx playwright test --config=playwright.config.live.js --project=shop-api
+npx playwright test --config=playwright.config.health.js            # health 不在 live config 的 project 内
+npx playwright test --config=playwright.config.live.js --project=dx-bridge
+
+# 189 节点 admin(单节点任务)
+node _r190_189_admin.cjs kick && node _r190_189_admin.cjs read
+# 204 节点 frontend(openCode 在 204:4091,项目 D:\cfc)
+node _r190_204_run.cjs
+# 251 节点 langgraph pytest(setsid 分离 + 单次读,禁止轮询建 shell)
+node _r191_251_lg.cjs kick / read / run
+
+# Jest
+cd d:/cfc/cfc-web && npx jest --ci            # 116/116
+cd d:/cfc/cfc-frontend && npx jest --ci       # 609 passed / 3 failed / 12 skipped
+cd d:/cfc/tests && npx jest --config=jest.config.js   # 7/16(9082 未起)
+
+# 线上 API 32 例(点名 4 文件,勿带全量 testMatch)
+cd d:/cfc/tests && npx playwright test -c playwright.config.api.js --output=../_r191_api2 \
+  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 --reporter=list
+
+# 匿名鉴权探针
+for u in /api/mind/fortune /api/energy/overview /api/health/plan/list /api/xiaomi-health/status /api/huawei-health/status /api/admin/families/overview; do
+  curl -s -m 12 -X POST -H 'Content-Type: application/json' -d '{}' -w " [%{http_code}]\n" "http://cfc.iwintrue.com$u"; done
+```
+
+## 附录 B:窗口 5 个契约类定向实测明细(B-191-1 补验)
+
+| 契约类 | 关联键 | 例数 | 通过 | 红 | 结论 |
+|---|---|---|---|---|---|
+| `AdminReportParserManageContractTest` | S-cfc-197 `admin.reportParser.manage` | 37 | **37** | 0 | **GREEN ✅**(实现已落地,可转 YELLOW/GREEN) |
+| `AdminKnowledgeBaseManageContractTest` | S-cfc-198 `admin.knowledgeBase.manage` | 13 | 7 | **6** | 预期 RED:同步失败重试 / 大批量分批 / base+vector 角色门禁三项未实现 |
+| `DimensionConfigAdminContractTest` | S-cfc-199 `admin.dimension.config` | 17 | 4 | **13** | 预期 RED(维度/权重/上限 CRUD + 来源比例治理未落地) |
+| `AdminSupplierManageContractTest` | S-cfc-200 `admin.supplier.manage` | 16 | 6 | **10** | 预期 RED(410 废弃壳 / 边界门禁 / role 守卫) |
+| `SupplierManageAdminContractTest` | S-cfc-200 契约级 | 19 | 3 | **16** | 预期 RED(SC-A-06 停用在售商品守卫未落地) |
+| **合计** | — | **102** | **57** | **45** | 45 红全为 TDD 前瞻态,非缺陷回归 |
+
+## 附录 C:度量口径声明(B-124 并存口径)
+
+| 指标 | 本轮口径 | 数值 | 与 R190 差异说明 |
+|---|---|---|---|
+| 台账 TC 唯一 | `tests/test-cases/*.md` 全量 `TC-*` 去重 | **618** | R190 报 308 为「单套命名」口径;本轮含 `TC-<域>-<标签>-<NN>` 与 `TC-<域>-U<NN>` 两套命名 |
+| 表行 | 台账 md 中以 `|` 开头行 | **1168** | R190 报 876(同一差异来源) |
+| 严格锚点 | `tests/**` JS/TS/py(排除 `generated`)∪ `cfc-backend/src/test/**/*.java` | **153** | R190 报 115(未并 Java 测试锚点) |
+| 双向命中(G9) | 台账 ∩ 锚点 | **106 = 17.2%** | R190 报 20.1%(= 62/308,分母口径不同) |
+| 场景→用例 | SC ∩(台账出现的 SC) | **152/244 = 62.3%** | R190 报 57.9%/72.1%(三套口径并存,见 B-124) |
+
+> 口径差异属既有 B-124 问题(度量脚本多口径),**不与 R190 直接比大小**;本轮同时给出全部原始数以便追溯。
+
+## 附录 D:本轮遗留取证文件(未入库,供复核)
+
+`_r191_backend_full.log`(1:01h 全量日志 73287 行)、`_r191_incr.log`(增量 52 例)、`_r191_browser.log`、`_r191_api.log`、`_r191_web_jest.log`、`_r191_fe_jest.log`、`_r191_root_jest.log`、`_r191_251_lg.cjs`、`_r191_metrics.py`、`_r191_api/`、`_r191_api2/`、`_r191_pw_*`。

+ 54 - 0
docs/tdd/test/automation-run-2026-11-13-R191.md

@@ -0,0 +1,54 @@
+# R191 轮自动化测试执行日志(2026-11-13 13:14~14:35)
+
+> 测试负责人|自动化定时任务触发|静默无人值守|基线 `309fa0220`(R190 后)→ 跑测中 `123f768c7` → 收尾 `5ad781a00`
+
+## 一、基线与环境
+
+- 基线:起点 `cfclub @ 309fa0220`(=origin/cfclub);跑测窗口内本地 HEAD 推进至 `123f768c7`(含 S-cfc-197 契约类 + auto-bump);收尾经 **HTTP 兜底** fetch(SSH 22 故障,B-189-1 第 2 轮)后 `--ff-only` 快进至 **`5ad781a00`**(+11 提交:S-cfc-199/200 三个契约类 + docs + 版本号)。
+- 窗口 `git diff 309fa0220..5ad781a00`:**main 源码 / specs / test-cases / user-scenarios / API_REFERENCE 零变更**;唯一变更为 **5 个契约测试类**(+1229 行左右)+ cfc-web 版本号 bump + docs。
+- 环境探针(SOP 第一步):`java 1.8.0_25` / `maven 3.6.1` / `node v22.22.2` 可用;本机 9082=closed(B-36 预期)、本机 4091=OPEN;`189:4090`=200、`204:4091`=200、`251:4096`=200、`251:9000`=404(根)/health 200;线上 `/admin`=302、`/frontend`=302、`/`=404;**git SSH 22 不可用 → HTTP 兜底**。
+
+## 二、本轮实测明细(全部本轮执行,无采信项)
+
+| # | 套件 | 节点 | 结果 | 耗时 | 关键点 |
+|---|------|------|------|------|--------|
+| 1 | admin-desktop E2E | 本机 | **5/5** | 1.4m | TC-A-U01~U05 全过(U05 55.3s) |
+| 2 | frontend-mobile E2E | 本机 | **6/6** | 1.9m | B-185 维持消除 |
+| 3 | shop-api E2E | 本机 | **4/4** | 9.7s | 价格排序契约 |
+| 4 | health 鉴权契约 | 本机 | **13/13** | 5.5s | TC-HP-U01~03 全 401;**须用 `playwright.config.health.js`** |
+| 5 | admin-desktop E2E | 189:4090 | **5/5** | 1.3m | HEAD `8524533c8`;`admin-live.spec.js` blob `4703d73fb`=本机 → 可比 |
+| 6 | frontend-mobile E2E | 204:4091 | **6/6** | 44.7s | **连续 2 轮 6/6 → B-95 销号** |
+| 7 | langgraph pytest | 251:4096 | **47/51** | 134.17s | 4 红全 `test_auto_tag`:429 AgnesAI ×3 + 401 `****ab12` ×5 → 环境红 |
+| 8 | langgraph live 三端点 | 251:9000 | `/health` **200/2.07ms**;`/api/v1/chat` **000/40.0s/0B**;`/api/v1/analyze` **000/50.0s/0B** | — | B-186-1 延续;单测绿≠链路可用 |
+| 9 | dx-bridge | 本机 | **2 skip** | 瞬时 | 端点 404(B-DX-1 第 33 轮) |
+| 10 | 线上 API 32 例 | 本机 | **25 过 / 7 跳 / 0 红** | 18.2s | 首跑 26 例/5.4min 异常 → 二次定案(B-191-3) |
+| 11 | cfc-frontend Jest | 本机 | **609 / 3 / 12(624)** | 66.1s | 3 红 = AC-R1 / AC-R2 / AC-2 RED-A7(S-cfc-132/133 预期 RED) |
+| 12 | cfc-web Jest | 本机 | **116/116** | 124.0s | 17 套件全绿 |
+| 13 | 根级黑盒 Jest | 本机 | **7/16(23)** | 7.4s | B-36 第 75 轮;全 `fetch failed`(9082 未起) |
+| 14 | **后端全量** | 本机 mvn | **386 类 / 3315 例 / 3232 过 / 73F+6E+4S = 97.50%** | **1:01h** | 386/386 XML 无沉默;2121 main + 392 test 源 0 错;dump 0 |
+| 15 | 收尾增量 3 契约类 | 本机 mvn | **52 例 / 13 过 / 39 红** | 2m43s | `AdminSupplierManageContractTest` 16(10F)、`SupplierManageAdminContractTest` 19(16F)、`DimensionConfigAdminContractTest` 17(13F) |
+| 16 | 线上匿名鉴权 6 端点 | 线上 | **6/6 = 401** | — | 全部 `{"code":401,"message":"请先登录"}` |
+
+## 三、全站口径
+
+- 合计 **4254 例** = 后端 3367(全量 3315 + 增量 52)+ fe 624 + web 116 + lg 51 + 浏览器 41(39 过 + dx 2 跳)+ API 32 + 根级 23
+- **4088 过 / 141 红 / 25 跳 = 96.10%(剔 skip 96.67%;剔全部预期 RED 98.34%)**
+- 红 141 = 后端 **118**(存量装置/数据 24 + TDD 前瞻契约 94)+ fe 预期 RED 3 + langgraph 环境红 4 + 根级环境 16
+- 环比 R190(4141/4026/94 红/97.22%):例 **+113**(后端窗口 5 契约类 102 + 浏览器跨节点 +2… 计入口径见报告)、过 **+62**、红 **+47**(前瞻契约 +45、环境 +3、装置浮动 −1)→ **零缺陷回归**
+
+## 四、后端红归因(79 全量 + 39 增量 = 118)
+
+| 层级 | 例数 | 类数 | 明细 |
+|---|---|---|---|
+| 存量装置/数据/环境 | **24** | 13 | `EnergySystemFlow` 6F、`GrowthPublicEndpointMapping` 5E(未入库)、`DimensionRegistryMapContract` 3F、`OrchestrationEngine`/`OrchestrationIntegration`/`MembershipPaySwitch`/`PaymentServiceORDRouting`/`TeamProfitCron`/`UserServiceWechatLogin`/`UserServiceWechatLoginContract`/`GuideModuleIntegration`(1E)/`MembershipPlanPurchase`/`TaskReviewScP11` 各 1 |
+| TDD 前瞻契约(待实现) | **94** | 12 | `TeacherMindRecord` 12、`TeacherAppointmentGuard` 10、`AdminKnowledgeBaseManage`(S-cfc-198) 6、`FamilyAutoCreateForPurchase` 4、`PlanContentSafetyReview` 4、`TeacherDataIsolationScT13` 4、`TeacherPlanCreate` 4、`NutritionPlanTeacher` 3、`TeacherAssessmentRecord` 3、`TeacherDimensionScore` 2、`GuideFamilyTaskReview` 2、`TeacherFamilyOverview` 1、远端三类 39 |
+
+## 五、处置与结论
+
+- **B-191-1 新增(P1 流程)**:跑测窗口内远端推入 3 个契约类(52 例 39 红),已按「双 fetch + 增量定向」补验并计入总量,避免 39 例 TDD-RED 被漏记/误判为回归。
+- **B-191-2 新增(P1 装置/性能)**:全量 **1:01h**(R188 同源码 43:15);慢类 `ArticleCategoryControllerTest` **493.97s**、`AdminFamilyOverviewControllerTest` 341.2s、`GrowthPublicEndpointMappingTest` 334.2s、`GrowthRecordSyncFlowTest` 280.7s、`PlannerBindInviteFlowTest` 178.1s;`cfc-scheduler` 日志 20524/73287 = **28.0%**。
+- **B-191-3 新增(P2 工具/度量)**:API 套件首跑 26 例/5.4min、二次 32 例/18.2s → 例数与耗时均不可复现,采集侧须双校验 `Running N tests` 与 summary。
+- **B-95 销号**:204 节点 fe 连续 2 轮 6/6(46.1s / 44.7s)。
+- **S-cfc-197 GREEN**:`AdminReportParserManageContractTest` 37/37。
+- **B-177-1 第 13 轮复现**:summary 打印后 2 进程存活 4m33s,`EXIT=` 不落盘 → 已 `kill -9`,`ps` 复核 0。
+- **门禁**:不通过(有条件)—— G1 96.10% ❌、G2 118 ❌、G7 47/51 ❌、G9 17.2% ❌、G11 漏拦 18/陈旧 26 ❌;G3 ⚠️、G4/G5/G6/G8/G10/G12/G13 ✅。

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

@@ -1365,3 +1365,27 @@
 | **B-178-1(第 9 轮)** | TaskReviewScP11 反射装置浮动 | 测试(P2) | **延续 2F** → `@MockBean` 替代 `ReflectionUtils`。 | 测试 | 2026-11-13 12:35 | 待处理 |
 | **B-142-1(销号维持第 20 轮)** | 匿名端点鉴权 | 研发(已闭环) | **维持销号**。health 三端点全 **401**;API 安全套件 11 例全绿。 | 测试(R190 实测) | 2026-11-13 12:35 | 已闭(观察维持) |
 | **R190 门禁** | 全量 4141 / **4026** | 测试 | **不通过(承袭,无回归,正向项明确)**。✅G4 编译 0 错(含 S-cfc-186/182 test-compile)/G5 定向 21 surefire XML 完整/G6 **28 过+2 跳承袭**(admin 5/5 本机+189、fe 6/6 本机+**204**、shop 4/4、health 13/13)/G8 401 全绿/G10 **三节点**(189 + **204 恢复** + 251)/G12 SRS 零变更/G13 存量零漂移第 25 次;⚠️G3 609-624(3 预期 RED)、G7 **50/51(B-142-2 复发环境型)**;❌G1 **97.22%**(剔 skip 97.72%,+0.06pct)/G2 **74 红**(存量 25 + 契约预期 RED 49)/G9 20.1%/G11 漏拦 6 陈旧 26。**变化** = 例 +21(窗口 2 契约类 S-cfc-186 7 + S-cfc-182 14)、过 +23、红 +2(**S-cfc-186 预期 RED +1 + langgraph 401 环境红 +1,零缺陷回归**);**204 节点 fe 6/6 恢复(B-95 观察改善)**;浏览器任务级全绿、API 0 红、fe/web 零漂移;**S-cfc-182 已 GREEN**。 | 测试(R190 闭环) | 2026-11-13 12:35 | 已记录 |
+
+## R191 段(2026-11-13 14:35,HEAD `5ad781a00`,后端全量实跑 1:01h)
+
+| 编号 | 关联键/对象 | 类型 | 描述与处置 | 经办 | 登记时间 | 状态 |
+|---|---|---|---|---|---|---|
+| **B-191-1(P1 新增·流程/证据)** | 跑测窗口内多次推入契约类 | 测试/流程 | **已自处置**。窗口内本地 HEAD `309fa0220`→`123f768c7`(+S-cfc-197 37 例)+ 收尾 fetch +11 提交(`5ad781a00`,+S-cfc-199/200 三类 52 例)。若只跑一次全量即定稿,39 例 TDD-RED 会被记为「未覆盖」。**已按「双 fetch(提交前+推送前)+ `src/test/**` 命中即逐类定向」处置**:52 例全部取证并计入总量。下轮起写入 SOP §阶段 4。 | 测试(R191 实测) | 2026-11-13 14:35 | 已处置(SOP 化) |
+| **B-191-2(P1 新增·装置/性能)** | 后端全量耗时劣化 | 研发/测试 | 同源码 **43:15(R188)→ 1:01h(本轮,+41%)**。慢类:`ArticleCategoryControllerTest` **493.97s**、`AdminFamilyOverviewControllerTest` 341.2s、`GrowthPublicEndpointMappingTest` 334.2s、`GrowthRecordSyncFlowTest` 280.7s、`PlannerBindInviteFlowTest` 178.1s(前 5 占 ~45%);`cfc-scheduler` 日志 **20524/73287 = 28.0%**(B-152-3 复现)。根因=controller 层 `@SpringBootTest` 全上下文 + 缺 `src/test/resources/application-test.yml`(每类重跑 `DatabaseInitializer`)+ B-156-1/B-170-1 迁移语法错。**建议**:增设 `application-test.yml`(禁 `@EnableScheduling`)+ 慢类改 `@WebMvcTest`+`@MockBean` + 先修两条 DDL。 | 测试(R191 实测) | 2026-11-13 14:35 | 待处理 |
+| **B-191-3(P2 新增·工具/度量)** | 线上 API 套件例数不可复现 | 测试/工具 | 同命令首跑 **26 例(19 过 + 7 跳)/5.4min**,二次(`--reporter=list`)**32 例(25 过 + 7 跳)/18.2s**(与 R190 一致)。首跑 6 例未计入、耗时高 18 倍。**采集侧须双校验**:`Running N tests` 的 N = 点名文件静态用例数 **且** summary pass+fail+skip = N;不符即重跑并记录两次口径。本轮以二次运行(32 例)定案。 | 测试(R191 实测) | 2026-11-13 14:35 | 待处理(采集口径) |
+| **B-95(销号)** | 204 节点 fe 失联 | 环境 | **销号**。204 fe **连续 2 轮 6/6**(R190 46.1s + R191 44.7s);openCode 服务在 **204:4091**、项目 `D:\cfc`。 | 测试(R191 实测) | 2026-11-13 14:35 | **已闭** |
+| **S-cfc-197(GREEN 确认)** | `admin.reportParser.manage` | 研发(收尾) | **37/37 全绿**(`AdminReportParserManageContractTest`)→ 实现已落地,可直接转 YELLOW/GREEN 并移出 CI 排除清单。 | 测试(R191 实测) | 2026-11-13 14:35 | 待研发登记收尾 |
+| **S-cfc-198(6 前瞻 RED)** | `admin.knowledgeBase.manage` | 研发(P1) | **预期 RED**:① 同步失败**重试**缺失(无 `maxRetries`/`syncWithRetry`/`@Retryable`);② 大批量**分批**缺失(无 `syncBatch`/`BATCH_SIZE`);③ `KnowledgeBaseController`/`KnowledgeBaseVectorController` **无平台角色门禁**(应对齐 `AdminUnifiedKnowledgeController.allowed`)。13 例中 7 绿。 | 测试(R191 实测) | 2026-11-13 14:35 | 待处理(研发实现使绿) |
+| **S-cfc-199/200(39 前瞻 RED)** | dimension.config / supplier.manage | 研发(P1) | `DimensionConfigAdminContractTest` 17 例 13F;`AdminSupplierManageContractTest` 16 例 10F;`SupplierManageAdminContractTest` 19 例 16F(410 废弃壳 / 边界门禁 / role 守卫 / SC-A-06 停用在售商品守卫)。 | 测试(R191 定向实测) | 2026-11-13 14:35 | 待处理(研发实现使绿) |
+| **B-142-2(复发·第 2 轮)** | 251 上游 LLM 凭据/配额 | 运维(P0) | **复发**。pytest 47/51,4 红全 `test_auto_tag`;`429 AgnesAI 免费额度耗尽` ×3 + `401 api key ****ab12 invalid` ×5。节点 `cfc-langgraph` 与本地零 diff → 环境型。**需更换 key + 升级配额**;连续 2 轮 51/51 后再销号。 | 测试(R191 实测) | 2026-11-13 14:35 | 待处理 |
+| **B-186-1(第 5 轮)** | langgraph live chat/analyze 挂死 | 运维/研发(P1) | **延续**。`/health` 200/2.07ms,但 `/api/v1/chat` **000/40.0s/0B**、`/api/v1/analyze` **000/50.0s/0B**。**单测绿 ≠ 链路可用**,与 B-142-2 同根因。 | 运维/研发 | 2026-11-13 14:35 | 待处理 |
+| **B-177-1(第 13 轮)** | 251 pytest 打印 summary 后不退出 | 研发/测试(P1) | **复现**。`4 failed, 47 passed in 134.17s` 已打印,2 进程存活 **4m33s**(`Sl`),`EXIT=` 永不落盘;`kill -9` 后 `ps` 复核 0。修法:`app/main.py` shutdown `await client.aclose()` + 派发器 `timeout -k 10 900`。 | 研发/测试 | 2026-11-13 14:35 | 待处理 |
+| **B-152-1/2(第 22 轮·恶化)** | CI `BACKEND_OBSERVED_CLASSES` 失真 | 研发/CI(P0/P1) | **恶化**。清单 33 类 vs 实测红类 **25** → **漏拦 18**(R190 为 6,新增 S-cfc-197/198/199/200 及 Teacher 系契约类)、**陈旧 26** → `backend-blocking-junit` 必红。建议按实测 25 类重写并加「红类↔清单自动差集」步骤。 | 研发/CI | 2026-11-13 14:35 | 待处理 |
+| **B-162-1(第 17 轮)** | 测试类未入库 | 治理(P1) | **延续**。`GrowthPublicEndpointMappingTest`(5E,单类 334.2s)/ `JwtInterceptorGrowthPolicyTest` / `ArticleTagsContractTest` 仍 `??`,但参与编译与执行(本轮 392 测试源 vs HEAD 追踪 392 → 需入库以稳基线纯度)。 | 研发/测试 | 2026-11-13 14:35 | 待处理 |
+| **B-178-1(第 10 轮)** | TaskReviewScP11 反射装置浮动 | 测试(P2) | **延续**。本轮 **1F**(R190 为 2F)→ 无规则浮动,建议 `@MockBean` 替代 `ReflectionUtils`。 | 测试 | 2026-11-13 14:35 | 待处理 |
+| **B-36(第 75 轮零漂移)** | 根级黑盒 23 例 16 红 | 测试(P2 环境) | **零漂移**。`cd tests && npx jest --config=jest.config.js` → **7 过 / 16 红**(7.4s),全 `fetch failed`(本机 9082 未起)。 | 测试 | 2026-11-13 14:35 | 待处理 |
+| **B-DX-1(第 33 轮)** | dx-bridge 端点 404 | 部署/研发(P1) | **承袭**。两端点 404/404 → 2 skip;规格 `2026-11-08-dx-health-bridge.md` 明示「仅登记不实现」,skip 正确。 | 部署/研发 | 2026-11-13 14:35 | 待处理(待派发实现) |
+| **B-189-1(第 2 轮)** | git SSH 22 CLOSED | 运维(P1 环境) | **延续**。`git fetch origin`(SSH)报 `Please make sure you have the correct access rights`;改 `http://git.iwintrue.com/liaoxg/cfc.git` 后 fetch + push 成功(远端 HEAD=本轮产物)。建议把 fetch URL 一并改 HTTP 或恢复 22 端口。 | 运维 | 2026-11-13 14:35 | HTTP 兜底已推送,SSH 待修 |
+| **B-156-1 / B-170-1(第 15/12 轮)** | 迁移 DDL 缺陷 | 研发(P1/P2) | **延续未修**。`schema.sql:5354` 索引列缺失(`nutrition_age_dosage` 建表恒失败);`DatabaseInitializer.java:2261` 别名 UPDATE 派生表引用(`Unknown column 'a.id'`)。本轮 `cfc-scheduler` 日志占 28.0% 部分由此放大。 | 研发 | 2026-11-13 14:35 | 待处理 |
+| **B-142-1(销号维持第 21 轮)** | 匿名端点鉴权 | 研发(已闭环) | **维持销号**。六端点(mind/fortune、energy/overview、health/plan/list、xiaomi-health、huawei-health、admin/families/overview)全 **401 `请先登录`**。 | 测试(R191 实测) | 2026-11-13 14:35 | 已闭(观察维持) |
+| **R191 门禁** | 全量 **4254 / 4088** | 测试 | **不通过(有条件)**。✅G4 编译 0 错(2121+392 源,含 5 契约类)/G5 **386/386 XML 无沉默、dump 0**/G6 **39 过 + 2 跳**(admin 5/5 本机+189、fe 6/6 本机+**204**、shop 4/4、health 13/13)/G8 **6/6=401**/G10 三节点可比(189 blob `4703d73fb`=本机、204、251 源码零 diff)/G12 SRS 零变更/G13 存量零漂移**第 26 次**;⚠️G3 609-624(3 预期 RED)、G14 62.3%;❌G1 **96.10%**(剔 skip 96.67%,剔预期 RED **98.34%**)/G2 **118 红**(存量 24 + 前瞻契约 94)/G7 **47/51**(429+401 环境)/G9 **17.2%**/G11 漏拦 **18** 陈旧 26。**变化** = 例 +113、过 +62、红 +47(**前瞻契约 +45、环境 +3、装置浮动 −1,零缺陷回归**);后端由采信转**全量实跑**;**B-95 销号**、**S-cfc-197 GREEN**。 | 测试(R191 闭环) | 2026-11-13 14:35 | 已记录 |