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

test(R167): 测试负责人全站巡检汇报——B-142-1 admin鉴权门闭环(6端点全401)+langgraph 41→47回升+后端361类3045例98.95%零漂移第15次+CI漏拦红类扩大至6类

E2E Test Bot 19 часов назад
Родитель
Сommit
edb8af7386

+ 204 - 0
docs/tdd/automation-run-2026-11-12-R159.md

@@ -0,0 +1,204 @@
+# 测试闭环报告 · 每小时一轮(review 档,内网已授权)
+
+- **轮次**:R159(推断;末次自动化记录 R155 @2026-11-11 22:28,最新研发巡检 R158 @2026-11-12 01:48)
+- **执行时间**:2026-11-12 01:50–02:02 (GMT+8)
+- **执行档**:review 档(已授权内网 cfc.iwintrue.com→192.168.16.251;仅只读审查 + 测试目录用例编写;不访问外部公网、不改/不提交/不推送生产源码)
+- **Git HEAD**:`ba0a55565`(commit "docs(tdd): R158测试负责人汇报补口径备注 + 研发通知…")
+- **仓库写入**:**零写入**(未改生产源码/测试、未提交、未推送)
+
+---
+
+## 1. 执行范围
+
+| 模块 | 动作 | 命令/方式 | 备注 |
+|------|------|-----------|------|
+| cfc-web | Jest 单测+组件 | `CI=true npx jest --ci --coverage` | 本地已装,实跑 |
+| cfc-frontend | Jest 单测+组件 | `CI=true npx jest --ci --testPathIgnorePatterns="api.test.js" "config.test.js"` | 排除公网外联用例(P-9) |
+| cfc-backend | 离线编译核验 | `mvn -o test-compile` / `mvn -o compile` | Maven 位于 `/d/maven/apache-maven-3.6.1` |
+| 内网 E2E | 可达性探针 | `curl /admin`、`/frontend` | Playwright 1.63.0;hosts→192.168.16.251 |
+| 测试用例编写 | SRS 闸门 | git/find 比对 `docs/tdd/SRS.md`\|`需求分析`\|`specs`\|`API_REFERENCE.md` | 自 R155 后零变更→跳过 |
+
+---
+
+## 2. 实测结果(本轮真实数据)
+
+| 域 | 结果 | 明细 |
+|----|------|------|
+| **cfc-web Jest** | ✅ 17 套 / 116 例 全绿 | `Tests: 116 passed, 116 total`,EXIT0;覆盖率 语句~10.08% / 分支~6.06% / 函数~7.48% / 行~9.95%(引用 R155 稳态基线,本轮零漂移) |
+| **cfc-frontend Jest**(P-9 排除) | ⚠️ 40 套 / 474 例 = 459 过 / **3 失败** / 12 跳 | EXIT1;3 失败均为 **TDD 预期红(非回归)** |
+| **后端 `mvn -o compile`** | ✅ GREEN | EXIT0,21s,主源码编译通过 |
+| **后端 `mvn -o test-compile`** | ✅ GREEN(重试) | 首次 280s 冷启超时(EXIT124),重试 86s EXIT0;**生产+测试源码均编译通过** |
+| **内网 E2E 探针** | ✅ 2/2 可达 | `/admin`→HTTP 302(登录墙)、`/frontend`→HTTP 302(H5 渲染);hosts 解析 192.168.16.251 正常 |
+| **后端全量 `mvn test` + JaCoCo** | ⛔ 未实测 | MySQL 3306 不可达,引用 R155 基线 2946 类 / 2925 例 / 17 红 / 99.29% |
+
+### 前端 3 例失败分类(全部为预期红,非回归)
+| 测试文件 | 失败用例 | 归属 | 性质 |
+|----------|----------|------|------|
+| `cfc-frontend/__tests__/pages/growth-main/growthHistory.dayGroupView.test.js` | `RED-A7 无有效业务日期的记录被跳过` | S-cfc-134 | TDD-RED 契约,实现未交付 |
+| `cfc-frontend/__tests__/pages/signature/signature.consignee.test.js` | `AC-R1 组件必须暴露确认回调` / `AC-R2 模板包含手签名确认段(<hand-signature>)` | S-cfc-53 | TDD-RED 契约,实现未交付 |
+
+> 较 R155 的 3 红(S-cfc-30/52/53):**S-cfc-30、S-cfc-52 已转绿(实现交付)**,新增 S-cfc-134 预期红 → 净红数仍为 3,属正常 TDD 演进,零代码回归。
+> 说明:首跑曾出现 `AuditDetailDrawer.spec.js` 挂载报错,但该文件**不存在于仓库**(路径为 Jest worker 崩溃栈残留),重跑稳定仅 2 失败套件;判定为 **worker 崩溃伪失败**,非稳定缺陷。
+
+---
+
+## 3. 回归与闭环判定
+
+- **cfc-web**:与本轮及 R155 逐项一致,116/116 绿,覆盖率零漂移 → **无新增生产回归**。
+- **cfc-frontend**:红例差集为空(3 红全为预期红),新增测试文件 `cfc-frontend/__tests__/utils/membershipGate.test.js`(已绿,覆盖补强)→ **无新增生产回归**。
+- **后端**:主编译与测试编译均 GREEN(冷启超时已重试闭环)→ **无编译回归**。
+- **E2E 探针**:2/2 可达,与 R155 一致。
+
+---
+
+## 4. 测试用例编写产出
+
+- **SRS 闸门结果**:`git log 5ee173916..HEAD` 对 `docs/tdd/SRS.md` / `docs/需求分析` / `docs/superpowers/specs` / `docs/superpowers/api/API_REFERENCE.md` **零命中**;`find -newermt` 亦无上述文件变更。
+- **结论**:**本次无需求变更,跳过编写测试用例**(仓库零写入,避免抖动)。既有预期红(S-cfc-53/S-cfc-134)契约用例已存在,随实现交付将自然转绿。
+- 关联 R158 研发通知:测试用例文档(signature.md 等 6 个)有变更,但属 **TDD 台账/库存刷新**,非 SRS/需求能力键变更 → 不触发本自动化编写闸门。
+
+---
+
+## 5. 覆盖率
+
+| 模块 | 语句/行 | 分支 | 函数 | 门禁(G9≥20%) |
+|------|---------|------|------|--------------|
+| cfc-web | ~10.08% | ~6.06% | ~7.48% | ❌ 未达 |
+| cfc-frontend | ~53.57% | — | — | ✅(引用 R155) |
+| cfc-backend | JaCoCo N/A(未连库) | — | — | ⛔ 未实测 |
+
+---
+
+## 6. 新增风险
+
+- **无新增代码缺陷**。本轮相对 R155/R158 稳态:
+  - 新增测试资产 `membershipGate.test.js`(绿,覆盖补强,正向)。
+  - 后端 `test-compile` 首次冷启超时(280s),重试即绿 → 记为**环境型波动**,非代码问题,但需关注是否随测试源增长持续变慢(见问题 P7)。
+  - langgraph 口径(R158):收集 51 例 / 实跑 43 例,差 8 例未进入执行(**待核实**);9 红为 AgnesAI 429 + 记忆召回 key 401 环境错误(非代码)。
+
+---
+
+## 7. 五要素问题清单
+
+### P1 · 后端全量测试未连库实测(G7 缺口)
+① **问题描述**:后端全量 `mvn test` 因 MySQL 3306 不可达未能实测,17 红未连库核实,JaCoCo 不可得。
+② **测试 bug 点**:`cfc-backend` 测试依赖 `MySQL3306`(CLOSED 状态);引用 R155 基线 2946 类/2925 例/17 红/99.29%。
+③ **最优修改方案**:在可达 MySQL 的环境执行 `mvn test`,逐条核对 17 红是否真实失败(疑似需 DB 的集成用例)。
+④ **修改目的**:验证后端真实测试状态,消除"未实测"缺口,满足 G7。
+⑤ **闭环方式**:连库 `mvn test` 0 真红 + JaCoCo≥80% → 通过 G7。
+
+### P2 · cfc-web 覆盖率不足(G9 ❌)
+① **问题描述**:cfc-web Jest 覆盖率 语句~10%/分支~6% < 20% 门禁,多数 vue 视图 0% 覆盖。
+② **测试 bug 点**:`cfc-web/src/**/__tests__/` 仅 17 套 / 116 例。
+③ **最优修改方案**:依据 `API_REFERENCE.md` 与 SRS 增补组件/工具单测,优先覆盖 `views/admin`、`views/teacher` 等零覆盖目录。
+④ **修改目的**:满足 G9≥20%,降低视图层回归风险。
+⑤ **闭环方式**:cfc-web 覆盖率≥20% 即闭环。
+
+### P3 · 无 CI 固化(G11 ❌)
+① **问题描述**:测试仅在人工/自动化脚本触发,回归门禁无法自动卡口。
+② **测试 bug 点**:仓库未见 `.github/workflows` 或等效 CI 配置(待核实)。
+③ **最优修改方案**:接入 CI,在每次 push/PR 跑 cfc-web/cfc-frontend Jest + 后端 `test-compile`。
+④ **修改目的**:固化回归门禁,防止预期外回归合入。
+⑤ **闭环方式**:CI 跑通且门禁生效即闭环。
+
+### P4 · 前端公网外联用例(P-9)
+① **问题描述**:`cfc-frontend/__tests__/api.test.js`、`config.test.js` 含公网外联;本轮为守"不访问公网"约束显式排除,根因未修。
+② **测试 bug 点**:`cfc-frontend/__tests__/api.test.js`、`config.test.js`。
+③ **最优修改方案**:增加 `CFC_OFFLINE` 守卫或 mock 适配器,使测试离线可跑。
+④ **修改目的**:消除公网依赖,使全量前端测试可在 review 档实测。
+⑤ **闭环方式**:移除排除项后 cfc-frontend 全量 EXIT0 即闭环。
+
+### P5 · admin.referral 零覆盖(TR-25 历史缺口)
+① **问题描述**:admin 转介绍(referral) 相关接口/前端零测试覆盖(历史遗留)。
+② **测试 bug 点**:`docs/superpowers/specs/2026-11-10-article-tag-filter-design.md` 提及;admin.referral 无专属契约测试。
+③ **最优修改方案**:补 `admin.referral` 契约测试 + 前端用例。
+④ **修改目的**:补历史覆盖缺口。
+⑤ **闭环方式**:admin.referral 有 ≥1 绿用例即闭环。
+
+### P6 · langgraph 收集/执行差 + 环境红(需核实/授权)
+① **问题描述**:langgraph pytest 收集 51 例实跑 43 例(差 8 例未进入执行,待核实);9 红为 AgnesAI 429 + 记忆召回 key 401 环境错误。
+② **测试 bug 点**:`cfc-langgraph` pytest 收集/执行差异;conftest 条件跳过;记忆召回 key `****ab12` 无效。
+③ **最优修改方案**:排查 conftest 跳过逻辑并补 xfail/skip 标注;平台侧恢复 AgnesAI 额度 / 更换有效记忆召回 key。
+④ **修改目的**:使 langgraph 分母可对账、红集合收敛为 0 代码红。
+⑤ **闭环方式**:51 例全对账 + 0 代码红即闭环(**需联网授权**)。
+
+### P7 · 后端 test-compile 冷启超时(环境波动)
+① **问题描述**:后端 `mvn -o test-compile` 首次尝试 280s 超时(冷启),重试 86s GREEN。
+② **测试 bug 点**:`cfc-backend` Maven reactor 冷启动慢 / 本地仓库状态。
+③ **最优修改方案**:预热 Maven 守护进程或首次构建放宽超时;核对是否新增大型测试源致编译变慢。
+④ **修改目的**:保证 review 档可稳定实跑 test-compile。
+⑤ **闭环方式**:连续两次 test-compile EXIT0 且 < 180s 即闭环。
+
+---
+
+## 8. 20 类测试覆盖矩阵(三态速览)
+
+| # | 测试类型 | 三态 | 证据 |
+|---|----------|------|------|
+| 1 | 单元测试(后端) | 待核实 | MySQL DOWN,引用 R155 2946 例/17 红 |
+| 2 | 单元测试(cf-web) | 已发现 | 116 例全绿 |
+| 3 | 单元测试(cf-frontend) | 已发现 | 474 例/3 预期红 |
+| 4 | 组件级测试 | 已发现 | vue-test-utils 17 套 + uni-app spec |
+| 5 | 测试覆盖率 | 已发现(部分❌) | cf-web 10%<20%;cf-fe 53.57% |
+| 6 | 变异测试 | 未发现 | 未配置 |
+| 7 | 集成测试 | 待核实 | 后端需 DB |
+| 8 | 契约测试 | 已发现 | ArticleTagsContractTest、AdminFamilyStatsContractTest 等 |
+| 9 | 接口 API 测试 | 已发现(探针级) | E2E 探针 /admin、/frontend 2/2 可达 |
+| 10 | 系统/端到端(E2E) | 已发现(探针)/待核实(业务流) | 可达性 2/2;登录态业务流缺凭据 |
+| 11 | 验收 UAT | 待核实 | — |
+| 12 | BDD 规格 | 未发现 | — |
+| 13 | 冒烟测试 | 已发现 | E2E 探针=冒烟级 |
+| 14 | 回归测试 | 已发现 | 逐轮零漂移比对 |
+| 15 | 探索性测试 | 未发现 | — |
+| 16 | 性能测试 | 未授权未执行 | execute 档公网,未授权 |
+| 17 | 可靠性测试 | 待核实 | langgraph 429 重试属部分 |
+| 18 | 安全测试(SAST/DAST/依赖漏洞/渗透) | 未授权未执行 | execute 档公网,未授权 |
+| 19 | 兼容/可用/无障碍测试 | 未发现 | — |
+| 20 | QA流程/质量指标/全项目代码审查/CI | 已发现(部分❌)/待核实 | TDD 台账已建;CI 缺失(G11);全项目代码审查本闭环未做 |
+
+---
+
+## 9. 待核实项
+
+- 后端 17 红是否真实失败(需连库)。
+- langgraph 8 例未进入执行的根因(conftest 条件跳过?插件过滤?)。
+- cfc-backend 是否存 `.github/workflows` 或等效 CI(G11 判定)。
+- admin.referral(TR-25) 接口与前端现状(零覆盖确认)。
+- 登录态 E2E 业务流凭据可用性(`MACHINE_JSON_PATH` 是否存在有效凭据)。
+
+---
+
+## 10. 需用户单独授权才能继续的项(未授权未执行 + 测试设计)
+
+| 项 | 为何未执行 | 测试设计(供授权后执行) |
+|----|-----------|--------------------------|
+| 后端全量 `mvn test` + JaCoCo | MySQL 3306 不可达(本地环境,非公网) | 在可达 MySQL 环境:`mvn test` + JaCoCo 报告;门禁 0 真红 + ≥80% |
+| 安全测试 SAST/DAST/依赖漏洞扫描 | execute 档,需联网公网,未授权 | `npm audit` / OWASP 依赖检查 / 静态扫描;零高危即通过 |
+| 性能/可靠性压测 | execute 档,打到目标环境需联网,未授权 | 对 9082/9000 做基准压测;P95 延迟与错误率门禁 |
+| 登录态 E2E 业务流 | 无 `MACHINE_JSON_PATH` 凭据 | 凭据经环境变量注入后,用 Playwright 跑 /admin、/frontend 登录后关键路径 |
+| LangGraph 9000 复验 | 需 251 节点 + AI 凭据,且属联网 | 在授权环境跑 `pytest`,目标 51 例全对账 + 0 代码红 |
+
+> 上述项本轮回退为「测试设计 + 缺口诊断」,未自行联网、未安装依赖、未补跑全量。
+
+---
+
+## 11. 门禁结论
+
+**结论:⛔ 有条件通过(与 R155/R158 稳态持平)**
+
+- 可执行本地测试**全部通过**:cfc-web 116/116 绿、后端 `test-compile` GREEN、cf-frontend 红例均为 TDD 预期红(非回归)、E2E 探针 2/2 可达。
+- 未通过的门禁(G7 后端连库、G9 覆盖率<20%、G11 无 CI、P-9 公网外联根因、admin.referral 零覆盖)均由**环境/授权/历史缺口**导致,非本轮引入的代码回归。
+- 新增测试资产为正向补强,无新增生产回归。
+
+### 复评条件(满足即转「通过」)
+1. 连库 `mvn test` 0 真红 + JaCoCo≥80%(G7);
+2. cfc-web 覆盖率≥20%(G9);
+3. 修 P-9(`CFC_OFFLINE` 守卫,0 外联);
+4. 授权安全 + 性能 + 依赖扫描零高危(execute 档);
+5. 登录态 E2E 凭据注入跑通 + admin 鉴权门单测绿;
+6. CI 固化(G11);
+7. admin.referral(TR-25) 补测;
+8. langgraph 51 例全对账 + 0 代码红(需联网授权 + 平台恢复 AgnesAI 额度/有效记忆召回 key)。
+
+---
+*本报告为每小时自动化测试闭环产物;仓库零写入(未改生产源码/测试、未提交、未推送)。所有"未实测/未授权未执行"维度均如实登记,未写为通过。*

+ 174 - 0
docs/tdd/automation-run-2026-11-12-R164.md

@@ -0,0 +1,174 @@
+# 测试闭环·每小时 — 2026-11-12 06:32 轮(review 档,内网已授权)
+
+> 主理人:陆谨(软件测试专家团)|对象:浠艾福 XAF(workspace d:/cfc)|执行档:**review(已授权内网 + 测试用例编写)**
+> HEAD = `275629291`(R163 测试负责人全站巡检汇报)|上次本对象记忆轮 = R159(2026-11-12 02:02,ba0a55565)
+> 两轮间 **47 commits**(均 test(tdd) 契约批次 S-cfc-142~151 / docs(tdd) 汇报 / chore,无生产源码/需求文档变更)
+
+---
+
+## 1. 历史审查记录(跨会话对照,非本次结论依据)
+- 本次为该对象**连续稳态轮次**(自 R155 起零漂移第 N 次),非首次审查。
+- 历史遗留(已在往轮登记、本次复核未消除):P-9 前端公网外联根因未修;G9 cfc-web 覆盖率 10%<20%;G11 无 CI;后端 17~25 红未连库核实;admin.referral(TR-25) 零覆盖;langgraph 环境红(key 401 + 配额 429)。
+- 往轮门禁结论均为「⛔ 有条件通过」,本次沿用该口径并复核。
+
+## 2. 项目画像速览(只读,结合 AGENTS.md 约定)
+- 模块:cfc-backend(Spring Boot 2.7.18 + MyBatis-Plus + Java8,9082)|cfc-frontend(uni-app 微信小程序 Vue2,__tests__ 42 套)|cfc-web(Vue2 + ElementUI 管理端,17 套 Jest mock API)|cfc-langgraph(Python FastAPI,9000,需 AI+凭据)。
+- 关键路径:统一 `@PostMapping` 接口(禁 GET/PUT/DELETE)、JWT 拦截 `/api/**`、8 公开路径、MyBatis-Plus、`Result<T>` 响应、迁移唯一入口 `DatabaseInitializer.runMigrations()`。
+- 约束红线:不访问外部公网;不修改/提交/推送生产源码;现有 Jest 用 axios-mock-adapter mock API,**不据此断言真实服务端行为**。
+
+## 3. 执行范围
+| 项 | 范围 | 本轮是否实测 |
+|---|---|---|
+| cfc-web Jest(含覆盖率) | 17 套 mock API 单测 | ✅ 实测 |
+| cfc-frontend Jest(排除 P-9 公网 api/test.config) | 40 套(排除 2 公网套) | ✅ 实测 |
+| cfc-backend 编译 | `mvn -o test-compile`(离线) | ✅ 实测(冷启超时→重试 GREEN) |
+| cfc-backend 全量 `mvn test` + JaCoCo | 需 MySQL 3306 | ⛔ 降级(MySQL CLOSED)引用 R163 基线 |
+| 内网 E2E 探针 | cfc.iwintrue.com /admin · /frontend(hosts→192.168.16.251 私有内网) | ✅ 实测 2/2 |
+| 登录态 E2E 业务流 | 需 MACHINE_JSON_PATH 凭据 | ⛔ 降级(无凭据) |
+| 安全/性能/依赖漏洞扫描 | execute 档,需公网 | ⛔ 未授权未执行 |
+| LangGraph 9000 | 需 251 节点 + AI 凭据 | ⛔ 降级(未授权联网) |
+
+## 4. 实测结果(真实数据)
+
+### 4.1 cfc-web Jest(17 套 / 116 例)
+- **结果:116 / 116 通过,0 失败,EXIT=0(全绿)**
+- 覆盖率(零漂移):语句 **10.08%** / 分支 **6.06%** / 函数 **7.48%** / 行 **9.95%**
+- 注:axios-mock-adapter mock,不访问真实服务。
+
+### 4.2 cfc-frontend Jest(40 套 / 474 例,排除 P-9 公网 2 套)
+- **结果:459 通过 / 3 失败 / 12 跳过,EXIT=1**
+- 3 失败 = **预期 TDD 红(非回归)**,与 R159 逐项一致:
+  - `growthHistory.dayGroupView.test.js` → RED-A7(S-cfc-134,预期红)
+  - `signature.consignee.test.js` → AC-R1 + AC-R2(S-cfc-53,预期红)
+- 红例差集空 → **零漂移**,无新增生产回归。
+
+### 4.3 cfc-backend 编译(离线)
+- 冷启首跑 `mvn -o test-compile` 超时 **EXIT=124**(5m23s 冷启)→ 重试(warm)**EXIT=0(GREEN)**
+- 生产 + 测试源码(含 47 提交新增契约测试 S-cfc-142~151)均编译通过,**无编译回归**。
+
+### 4.4 内网 E2E 探针(Playwright 1.63.0,已授权内网)
+- curl 探活:/admin **302**(尾斜杠跳转)→ Playwright `waitUntil:commit` 实测 **200**,title「浠艾福管理后台」;/frontend **302**→**200**,title「浠艾福」。
+- **2 / 2 可达并渲染(绿)**。本次初用 `domcontentloaded` 因跳转后资源加载挂起超时,已改 `commit` 复测通过(服务本身可达,非「未可达」)。
+- 无登录凭据 → 仅做可达性探针,**未跑登录态业务流**(降级项见 §8)。
+
+### 4.5 SRS / 需求变更闸门
+- `git diff --stat` + `find -newermt "2026-11-12 02:02"` 对 `docs/tdd/SRS.md` / `docs/需求分析` / `docs/superpowers/specs` / `API_REFERENCE.md` **零命中**。
+- **闸门闭合 → 跳过编写/更新测试用例,仓库零写入(零抖动)**。47 commits 均为测试侧契约/台账,非 SRS/需求键变更。
+
+## 5. 回归与闭环判定
+- 可执行套件(cfc-web 双绿 + cfc-frontend 3 预期红 + backend test-compile GREEN + E2E 2/2)与 R159 **逐字段一致**,红例差集空 → **零漂移,无新增失败/无新闭环**。
+- 引用基线(未重跑,如实登记):后端全量 R163(契约批次 S-cfc-142~151 首验 96 例 78绿/18预期红 + 主套 2946/2925/17红 99.29%);langgraph R163(41/51,环境红 10→8 改善)。
+
+## 6. 测试用例编写产出
+- **本次无需求变更(SRS 闸门闭合)→ 跳过编写测试用例,仓库零写入。**
+- 待 SRS/需求文档出现新增或修改时,再行比对 `cfc-web/src/**/__tests__`、`cfc-frontend/__tests__` 缺口并仅写入测试目录(不触碰生产源码、不提交、不推送)。
+
+## 7. 覆盖率
+| 模块 | 语句 | 分支 | 函数 | 行 | 备注 |
+|---|---|---|---|---|---|
+| cfc-web | 10.08% | 6.06% | 7.48% | 9.95% | 零漂移,<20% 门禁未达(G9 ❌) |
+| cfc-frontend | — | — | — | ~53.57% | 引用 R155,本轮未重采 |
+| cfc-backend | — | — | — | — | JaCoCo N/A(MySQL CLOSED,未连库实跑) |
+
+## 8. 待核实项 / 降级项(如实登记,未实测≠通过)
+1. **后端全量 `mvn test` + JaCoCo**:MySQL 3306 CLOSED、9082 DOWN → 引用 R163 基线;17~25 红未连库核实。
+2. **登录态 E2E 业务流**:无 MACHINE_JSON_PATH 凭据 → 降级为测试设计(见 §10)。
+3. **LangGraph 9000**:需 251 节点 + AI 凭据、未授权联网 → 沿用 R163(41/51,环境红)。
+4. **P-9 公网外联**:`cfc-frontend/__tests__/api/api.test.js`、`config/config.test.js` 对 `cfc.etotem.com.cn` 发真实请求,本轮**显式排除**以守不访问公网约束;根因未修。
+
+## 9. 需用户单独授权才能继续的项(标注「未授权未执行」并给测试设计)
+| 项 | 现状 | 未授权原因 | 测试设计(待授权后执行) |
+|---|---|---|---|
+| 安全测试(SAST/DAST/渗透) | 未执行 | execute 档需公网 | 本地 SAST(semgrep)扫源码 + 内网 DAST 对 cfc.iwintrue.com;公网依赖漏洞扫描(OWASP DC)需授权 |
+| 性能/可靠性压测 | 未执行 | execute 档打远端 | 对 192.168.16.251 内网加压(非公网);公网目标需授权 |
+| 依赖漏洞扫描(SCA) | 未执行 | 需公网下载库指纹 | `mvn dependency:analyze` + `npm audit`(离线可用部分)先跑,公网 CVE 库需授权 |
+| 登录态 E2E 业务流 | 未执行 | 无凭据 | 注入 MACHINE_JSON_PATH 本地凭据 → Playwright 跑 /admin 登录→列表→详情、/frontend 登录→首页核心流 |
+| 后端连库 `mvn test` + JaCoCo | 未执行 | MySQL 3306 CLOSED | 起本地/内网 MySQL → `mvn test` 全量 + JaCoCo 报告,闭环 G7 |
+
+## 10. 五要素问题清单(逐条)
+**P-9 · 前端测试公网外联**
+① 问题描述:`api.test.js`/`config.test.js` 在 CI/本地对 `cfc.etotem.com.cn` 发真实 POST,离线环境外联且污染断言。
+② 测试 bug 点:`cfc-frontend/__tests__/api/api.test.js`、`cfc-frontend/__tests__/config/config.test.js`。
+③ 最优修改方案:引入 `CFC_OFFLINE` 守卫,离线时以 axios-mock-adapter 拦截;或将两文件迁入独立 `network` 套并默认 skip。
+④ 修改目的:守住「不访问公网」约束,消除离线噪声红。
+⑤ 闭环:设 `CFC_OFFLINE=1` 重跑 Jest,两文件 0 外联、套件 EXIT=0。
+
+**G9 · cfc-web 覆盖率不足**
+① 问题描述:cfc-web 行覆盖率 9.95% < 20% 门禁。
+② 测试 bug 点:`cfc-web/src/views/**` 大量 Vue 组件 0% 覆盖(报告见 `_jest_web_r164.log`)。
+③ 最优修改方案:按 AGENTS.md 关键路径优先补 `views/admin`、`views/family`、`views/health` 组件渲染 + 交互测试。
+④ 修改目的:达 G9≥20%,提升管理端回归信心。
+⑤ 闭环:`npm test --coverage` 行覆盖率 ≥20% 且 116 例全绿。
+
+**G11 · 无 CI 固化**
+① 问题描述:门禁阈值无 CI 自动执行,依赖本每小时自动化,易漏判。
+② 测试 bug 点:仓库缺 `.github/workflows` 或等效 CI 配置。
+③ 最优修改方案:加 CI 流水线(lint→unit→build→contract),门禁阈值固化(G7/G9/G11)。
+④ 修改目的:防止回归逃逸,门禁常态化。
+⑤ 闭环:PR 触发 CI 全绿且覆盖率卡点生效。
+
+**admin.referral 零覆盖(TR-25)**
+① 问题描述:feat(admin) 新增 `/api/admin/referral/{summary,members,tree}` + AdminReferralController/TreeService + Users.vue 团队按钮,无测试且未同步 SRS。
+② 测试 bug 点:`cfc-backend .../admin/AdminReferralController.java`、`TreeService.java`;`cfc-web/src/views/admin/Users.vue`。
+③ 最优修改方案:补 Mockito 契约测试(鉴权流 + 团队树聚合)+ 前端组件测试;并回填 SRS 需求编号。
+④ 修改目的:消除新增功能覆盖缺口。
+⑤ 闭环:后端契约测试绿 + 前端组件测试绿,SRS 同步需求编号。
+
+**后端 17~25 红未连库核实**
+① 问题描述:引用基线存 17~25 未通过项(含 TDD-RED 预期 + 历史债),未连库实跑验证。
+② 测试 bug 点:`cfc-backend/src/test/**`(引用 R163 基线)。
+③ 最优修改方案:起内网 MySQL → `mvn test` 全量,区分预期红与真红。
+④ 修改目的:闭环 G7(0 真红 + JaCoCo≥80%)。
+⑤ 闭环:连库 `mvn test` 真红=0 且 JaCoCo 行≥80%。
+
+**langgraph 环境红(B-142-2)**
+① 问题描述:LangGraph 9000 调用 AgnesAI key 401 + 配额 429,导致用例环境红。
+② 测试 bug 点:`cfc-langgraph` 调用链(需 251 节点 + 有效 key)。
+③ 最优修改方案:恢复有效记忆召回 key / AgnesAI 配额,或 mock 外部 LLM 做离线回归。
+④ 修改目的:消除环境红,使 51 例全对账 0 代码红。
+⑤ 闭环:langgraph 51 例全跑通、0 代码红(需联网授权 + 平台恢复)。
+
+## 11. 覆盖缺口清单(类型 / 现状 / 风险 / 建议测试设计 / 优先级 / 闭环)
+| 缺口 | 现状 | 风险 | 测试设计 | 优先级 | 闭环 |
+|---|---|---|---|---|---|
+| 后端连库全量+JaCoCo | MySQL CLOSED | 真红无法核实 | 起 MySQL→mvn test+JaCoCo | P0 | G7 |
+| 前端公网外联 | 2 套外联 | 离线污染 | CFC_OFFLINE 守卫 | P1 | P-9 |
+| cfc-web 覆盖率 | 9.95% | 管理端回归弱 | 补组件测试 | P1 | G9 |
+| 安全/性能/依赖扫描 | 未授权 | 高危逃逸 | 本地 SAST+内网压测 | P1 | 授权后 |
+| 登录态 E2E | 无凭据 | 业务流未验 | 凭据注入跑通 | P2 | §9 |
+| admin.referral 覆盖 | 零覆盖 | 新功能缺口 | 契约+组件测试 | P2 | TR-25 |
+| CI 固化 | 无 | 门禁虚设 | 加 CI 流水线 | P2 | G11 |
+| langgraph 环境红 | key401+429 | 用例红 | 恢复 key/mock LLM | P2 | B-142-2 |
+
+## 12. 域结论表
+| 审查维度 | 负责专家 | 结论 | 关键证据 |
+|---|---|---|---|
+| 单元·组件 | 苏雅 | 通过(双绿) | web 116/116;frontend 459/3预期红/12跳 |
+| 集成·接口 | 柯砚 | 待核实(compile GREEN,执行引基线) | backend test-compile EXIT0;全量引 R163 |
+| 系统·验收 | 白樾 | 待核实(E2E 仅探针) | 内网 2/2 可达;登录流无凭据 |
+| 测试保障 | 闻朔 | 通过(零漂移) | 红例差集空,无新回归 |
+| 性能·可靠 | 骆骋 | 未授权未执行 | execute 档公网 |
+| 安全 | 关屿 | 未授权未执行 | execute 档公网 |
+| 兼容·体验 | 阮清 | 部分(E2E 渲染可达) | 两站点 200 渲染 |
+| 流程·度量·代码 | 何序 | 有条件(G9/G11 未达) | 覆盖率<20%、无 CI |
+
+## 13. 门禁结论
+**⛔ 有条件通过(与 R159/R162/R163 稳态持平,零漂移)。**
+
+可达标项:cfc-web 双绿零漂移、cfc-frontend 3 预期红非回归、backend test-compile GREEN(含新增契约编译通过)、内网 E2E 探针 2/2 可达。
+
+未达标/降级项(门禁未通过):G7 后端连库 0 真红 + JaCoCo≥80%(MySQL CLOSED,引基线 17~25 红);G9 cfc-web 覆盖率≥20%(9.95%);G11 CI 固化(无);P-9 公网外联(未修);安全/性能/依赖扫描(未授权);登录态 E2E(无凭据);admin.referral(TR-25) 零覆盖;langgraph 环境红。
+
+**复评条件(须全部满足方转「通过」):**
+1. 后端连库 `mvn test` 真红=0 且 JaCoCo 行 ≥80%(G7);
+2. cfc-web 覆盖率 ≥20%(G9);
+3. 修 P-9(CFC_OFFLINE 守卫,0 外联);
+4. 授权后安全+性能+依赖扫描零高危;
+5. 登录态 E2E 凭据注入跑通 + admin 鉴权门单测绿;
+6. CI 固化(G11);
+7. admin.referral(TR-25) 补测;
+8. langgraph 51 例全对账 0 代码红(需联网授权 + 平台恢复)。
+
+---
+**交付物**:`d:/cfc/docs/tdd/automation-run-2026-11-12-R164.md`(未提交、未推送、未改生产源码)。
+**仓库写入**:仅本报告 + 临时探针/日志(`_e2e_probe_r164*.cjs/.log`、`_jest_*_r164.log`、`_mvn_tc_r164*.log`),零生产/测试源码改动。

+ 57 - 0
docs/tdd/automation-run-2026-11-12-R167.md

@@ -0,0 +1,57 @@
+# R167 自动化执行记录(2026-11-12 08:38 ~ 09:55)
+
+## 1. 触发与档位
+
+- 触发:定时自动化「测试负责人闭环(全部用例通过 + 覆盖 SRS/场景含异常流)+ 浏览器走 cfc.iwintrue.com/admin 与 /frontend(189/本机每节点单任务)+ langgraph 派 251 + 结果有变提交远程并通知研发」
+- 执行档:**review(离线档)**;未安装依赖、未启停服务、未改生产代码
+- 轮次说明:记忆库停在 R156,实际 HEAD 已是 R165;另有 08:35 生成的 R166 报告(受沙箱限制仅跑两端 Jest)未入库 → 本轮按 **R167** 归档,并一并入库 R166 报告与 2 份游离 `automation-run`(R159/R164)
+
+## 2. 基线与环境
+
+| 项 | 值 |
+|---|---|
+| 基线 | `cfclub @ 8e4d17e83`(pull --ff-only 后;跑前 = origin) |
+| 窗口内远端 | `fef17fd44`(仅 docs + cfc-web 构建元数据,**零功能源码**) |
+| JDK / Maven | `D:\jdk1.8.0_25` / `D:\maven\apache-maven-3.6.1`(**工程根在 `cfc-backend`**) |
+| Node | v22.22.2 |
+| Chromium | `C:/Users/iwt/AppData/Local/ms-playwright`(chromium-1228/1243)→ 本机浏览器 E2E 可跑(推翻 R166 判断) |
+| 节点 | 251:9000=200 / 251:4096=401(凭据可用)/ 189:4090=401(凭据可用)/ 204:4090=000 |
+
+## 3. 执行明细
+
+| 步骤 | 命令 | 结果 | 耗时 |
+|---|---|---|---|
+| 后端全量 | `cd cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 mvn -o -B clean test` | 361 类 / 3045 例 / 3013 过 / 22F+6E+4S = **98.95%**;13 红类 | 60:00 |
+| 前端 Jest | `cd cfc-frontend && npx jest --silent` | 624 = **609 过 / 3 红 / 12 跳** | 42.2s |
+| 管理端 Jest | `cd cfc-web && npx jest` / `--coverage` | **116/116**;覆盖 10.08/6.06/7.48/9.95 | 40.2s |
+| 根级黑盒 | `cd tests && npx jest -c jest.config.js` | 23 = **7 过 / 16 红**(9082 未起,B-36) | 5.0s |
+| 浏览器 189 | `node docs/tdd/tools/dispatch_189_admin.cjs` | 首跑 3/5(502)→ 复跑 **5/5 EXIT=0**,spec blob `4703d73fb` | 28s / 73s |
+| 浏览器本机 admin | `--project=admin-desktop` | **5/5** | 1.8m |
+| 浏览器本机 fe | `--project=frontend-mobile` | **6/6** | 58.1s |
+| 浏览器本机 shop | `--project=shop-api` | **4/4** | 18.2s |
+| 浏览器本机 health | `-c playwright.config.health.js` | **13/13** | 13.9s |
+| 浏览器本机 dx | `--project=dx-bridge` | **2 跳**(端点 404) | — |
+| langgraph@251 | `dispatch_251_pytest.cjs kick` + 单次读 | **47 过 / 4 红(51)**;N429=2、N401=1 | 165.32s |
+| 线上鉴权 | 6 端点匿名 POST | **6/6 = 401**(B-142-1 闭环) | — |
+| 线上可达性 | `/admin` `/frontend` `/` | 302 / 302 / 404 | — |
+| 251 live | `/health` `chat` `analyze` | 200(24ms) / **000(120s)** / **000(120s)** | — |
+
+## 4. 合计
+
+- 全量 **3889 例 / 3820 过 = 98.23%**(剔 skip 98.68%);红 51(后端 28 + 根级 16 + lg 4 + fe 3);跳 18(后端 4 + fe 12 + 浏览器 2)
+- 后端红例构成:**存量 17(第 15 次零漂移)** + 预期 RED 6(S-cfc-147 4 / S-cfc-151 2)+ 未入库文件 5(B-162-1)
+
+## 5. 产出
+
+- `docs/tdd/orchestration/report-test-2026-11-12-R167.md`(测试负责人模板 + 20 类矩阵 + 8 条五要素 + 8 项覆盖缺口 + 门禁表)
+- `docs/tdd/automation-run-2026-11-12-R167.md`(本文件)
+- `docs/tdd/notice-2026-11-12-R167-研发通知.md`
+- `docs/tdd/test/blockers.md`(+B-167-1/2/3、B-142-1-Close、B-156-1-Update、B-152-1/2-Update、R167 门禁)
+- 归档游离资产:`report-test-2026-11-12-R166.md`、`automation-run-2026-11-12-R159.md`、`automation-run-2026-11-12-R164.md`
+
+## 6. 本轮方法论新增
+
+1. **Windows 下 Playwright 浏览器二进制默认在 `%LOCALAPPDATA%\ms-playwright`**,用 Linux 的 `~/.cache/ms-playwright` 探测会得出「无 Chromium」的错误结论,进而整维降级为「引用上轮」——环境能力探测必须按 OS 取默认路径(B-167-3)。
+2. **「节点 5xx」必须三证区分**:本机直连端点 200 + 本机同套件全绿 + 节点复跑全绿 → 才是节点瞬态;只凭一次 502 会误记产品缺陷(B-167-1)。
+3. **live 端点探活必须与 pytest 结果分开判读**:同一实例 pytest 47/51(429)而 chat 端点 120s 零字节,说明「用例红」与「端点挂死」是同一上游配额的两个表现面,不能用一个否定另一个(B-167-2 呼应 R130 方法论)。
+4. **CI 排除清单要每轮做双向差集**:只算「漏拦」会漏掉「已绿仍排除」造成的门禁虚化,本轮 33 vs 13(漏 6 / 陈旧 26)一次抓全(B-152-1/2 第 4 轮)。

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

@@ -0,0 +1,38 @@
+# 研发通知 · R167(2026-11-12 09:55)
+
+> 来源:测试负责人定时巡检第 167 轮(全维度实跑)。完整报告:`docs/tdd/orchestration/report-test-2026-11-12-R167.md`;台账:`docs/tdd/test/blockers.md`。
+
+## 一、本轮结论
+
+**门禁:不通过(有条件)**。全量 **3889 例 / 3820 过 = 98.23%**(剔 skip 98.68%),红 51 / 跳 18。
+
+**最大正向**
+1. **B-142-1 闭环**:`/api/admin/**` 鉴权门已收口。匿名 POST 六端点全部 **401**(含历轮长期「200 + code:400」的 `/api/admin/families/overview`)。对应 `45b29e5f8` + 角色守卫。
+2. **langgraph 由 41/51 → 47/51**(R165 为 41 过 10 红)。
+3. **G10 双节点派发全通**:189 admin 复跑 **5/5 EXIT=0**(spec blob `4703d73fb` 与本机一致)、251 pytest **47/4**。
+
+## 二、请研发处置(按优先级)
+
+| 优先级 | 编号 | 问题 | 请做什么 |
+|---|---|---|---|
+| **P0** | B-142-2 / **B-167-2** | LLM 上游配额耗尽:pytest `429 AgnesAI free limit` ×2 + `401 ****ab12 invalid` ×1;**live `chat`/`analyze` 120s 零字节**(`/health` 200/24ms) | ① 运维轮换有效 key 并升级额度;② `cfc-langgraph/app/agents/intent_classifier.py:62` 兜底前记录上游状态码,**429/401 显式抛出**,禁止静默降级为 `chat`(当前会把配额故障伪装成「分类错误」) |
+| **P1** | B-156-1(第 3 轮) | `schema.sql:5345-5354` `nutrition_age_dosage` 列清单无 `product_id` 却声明 `INDEX idx_product (product_id)` → 建表恒失败;`DatabaseInitializer` catch 后仍打印「数据表检查完成」 | 删该 INDEX 或补 `product_id BIGINT`;实体另有 `updateTime` 而 DDL 无 `update_time`,一并补;建表失败改 ERROR 可观测 |
+| **P1** | B-152-1/2(第 4 轮,恶化) | `.gitlab-ci.yml:61` 清单 33 类 vs 实测红类 13 类:**漏拦 6 类** → `backend-blocking-junit` 必然失败;**26 类已绿仍被排除** | 用本轮实测红类刷新清单(漏拦:`GrowthPublicEndpointMappingTest`、`UserServiceWechatLoginTest`、`UserServiceWechatLoginContractTest`、`DanAssessmentRecordCreateContractTest`、`TaskReviewScP11ContractTest`、`TeamProfitCronContractTest`),并在 CI 增双向差集断言 |
+| **P1** | S-cfc-151(2 红) | `TaskController.reviewTask` 无审批人身份 → 跨家庭/匿名可直接审批并发分(横向越权);`permission_handler_mustDeclareReviewerIdentity` 未满足 | `f139a05a2` 已补 3 参重载(3 红→2 红);需 2 参入口禁用发分链路,并让控制器声明 `@RequestAttribute("userId")` |
+| **P1** | S-cfc-147(4 红) | `DanAssessmentRecordCreateContractTest`:materialId 必填、材料有效性、memberId 必填、成员-家庭归属 四守卫均缺失 | 按 TDD 补四类校验,拒绝时不得落库 |
+| **P2** | 存量 17 红(第 15 次零漂移) | EnergySystemFlow 6 / DimensionRegistryMap 3 / Orchestration 2 / WechatLogin 2 / MembershipPay 1 / PaymentORD 1 / TeamProfitCron 1 / GuideModule 1 | 建议先攻 EnergySystemFlow 6(收益最大);DimensionRegistryMap 3 需产品先定「空/缺参/未知值」三态契约 |
+
+## 三、测试侧自处置(无需研发动作)
+
+| 编号 | 事项 | 状态 |
+|---|---|---|
+| B-162-1 | `GrowthPublicEndpointMappingTest` 未入库却参与全量(5 errors / 396s) | 需研发/测试确认归属后入库或删除;本轮已如实计入红例 |
+| B-167-3 | R166「本机无 Chromium」为探测路径错误(Windows 默认 `%LOCALAPPDATA%\ms-playwright`) | 已纠正,本机浏览器 E2E 恢复全跑 28/28 + 2 跳 |
+| 锚点 | 严格可执行锚点 66/356 = 18.5%;0 锚点台账:vendor 0/17、health-datasource-bridge 0/17、deep-dive-plan-activation 0/6 | 下轮起分批补 `TC-*` 锚点 |
+
+## 四、复评条件
+
+1. langgraph 连续 2 轮 51/51(配额恢复 + `intent_classifier` 不再静默兜底);
+2. 后端红例降至 ≤10(先闭环 EnergySystemFlow 6 + S-cfc-147/151 的 6 例);
+3. 严格锚点 ≥ 40%(≥143/356);
+4. CI 排除清单双向差集为空,`backend-blocking-junit` 真实跑通。

+ 175 - 0
docs/tdd/orchestration/report-test-2026-11-12-R166.md

@@ -0,0 +1,175 @@
+# 测试负责人工作汇报(R166 轮)
+
+> 本汇报按《测试负责人工作汇报模板》填写。R166 为**零漂移稳态复验轮**:窗口内 `HEAD=a9ca91323`(=R165 提交)零新提交,仅 ~8 分钟间隔;本环境(沙箱)仅可执行两端 Jest,浏览器 E2E/后端 mvn/langgraph 派发因缺 Chromium 二进制与 251/189 opencode 凭据而**本轮回退引用 R165 权威值**,非本轮新实测。勿以模板占位符作为空数据。
+
+---
+
+## 基本信息
+
+| 项目 | 内容 |
+|------|------|
+| 汇报人 | 测试负责人(自动化测试闭环任务) |
+| 汇报周期 | 2026年11月12日 08:23 ~ 08:34(第 166 轮) |
+| 负责模块/单元 | 全站回归:管理端 admin + 小程序 H5 frontend(浏览器 E2E:189→admin、本机→frontend/shop/health/dx)+ cfc-langgraph(251 派发)+ 后端 JUnit 全量 + 前端/Web Jest + 根级黑盒 |
+
+---
+
+## 一、本轮工作数据汇总
+
+### 1.1 测试用例建设
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **本轮新增测试用例数*** | 0 个 | SRS/场景闸门零命中(HEAD=R165 后零提交),G12 合规 |
+| **本轮验证执行测试数*** | 740 个(实跑 740 + 引用 3182) | 实跑:fe Jest 624 + web Jest 116 = **740**;引用 R165 权威:浏览器 28 + langgraph 51 + 后端 3078 + 根级 23 = 3182 |
+| **用例通过率** | 98.51%(与 R165 同口径) | = (609+116+28+41+3045+7) PASS ÷ (624+28+51+3078+23 − 18skip);58 红(含预期 RED 与已知存量)另计,门禁见 §5 |
+
+### 1.2 会话与任务分发
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **分派任务数*** | 0 个 | 本环境无 Chromium / 无 251·189 opencode 凭据,未派发远程浏览器/langgraph 任务;仅本机串行直跑两端 Jest |
+| **恢复智能体会话数*** | 0 个 | 无会话中断 |
+| **当前在用会话数** | 0 个 | 所有任务已完成,无活跃浏览器自动化任务(符合「每节点仅一任务」约束) |
+
+### 1.2b 各会话当前工作状态列表
+
+| 会话标签 | 会话 ID | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
+|----------|---------|----------|----------|---------------|----------|------|
+| `local-jest` | 本机进程 | done | cfc-frontend / cfc-web Jest | 已完成(79.6s/104s) | d:\cfc\cfc-frontend、d:\cfc\cfc-web | fe 609/3/12、web 116/116(**零漂移**) |
+| `local-browser`(本机) | 本机进程 | blocked(env) | frontend/shop/health/dx UI E2E | 未执行 | d:\cfc\tests | **本机无 Chromium 二进制**(~/.cache/ms-playwright 空 + 无 playwright-core/.local-browsers)→ 引用 R165 权威 28/28+2skip |
+| `opencode-189`(admin 目标节点) | 192.168.16.189:4090 | blocked(env) | admin-desktop UI E2E | 未执行 | C:\code\cfc\tests | 189:4090 OPEN 但 opencode 鉴权门控,本环境无凭据 → 引用 R165 5/5 |
+| `opencode-251`(langgraph 目标节点) | 192.168.16.251:4096 | blocked(env) | langgraph pytest 51 例 | 未执行 | /sc-data/cfc/cfc-langgraph | 251:9000 /health={"status":"ok"} 但 251:4090 CLOSED / 251:4096 鉴权门控 → 引用 R165 41/10 |
+| `local-mvn`(后端全量) | — | blocked(env) | cfc-backend Maven 全量 | 未执行 | d:\cfc\cfc-backend | 本环境 `mvn` 不在 PATH;无源码变更(HEAD=R165)→ 引用 R165 3078=3045/29/4 |
+| `local-root`(根级黑盒) | — | blocked(env) | 根级黑盒 Jest | 未执行 | d:\cfc\tests | 引用 R165 7/16(9082 DOWN,B-36) |
+
+### 1.3 问题处置
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **新测试发现问题数*** | 0 个 | 无新增缺陷;两端 Jest 实测与 R165 严格零漂移 |
+| **已解决测试相关问题数*** | 0 个 | 本轮无新闭环(继承 R165 契约批次 11 红转绿成果) |
+| **待解决测试相关问题数** | 4 个(P0×1 / P1×2 / P2×1) | ① langgraph 10 红(B-142-2 环境波动);② B-156-1 建表 SQL;③ B-142-1 admin 鉴权门(余量收窄);④ B-162-1 未入库测试文件治理 |
+
+### 1.4 本轮 git 提交与推送证据(真理证据)
+
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
+|----------|-----------------|------|--------------|----------|------------|------|
+| — | 全站巡检 R166 | 汇报 | 测试文档(docs/tdd + 台账) | cfclub | 待提交时 push | **本轮零漂移 → 按规则不推送、不通知**(见 §5.2 变更触发判定) |
+
+> 本轮无 RED/YELLOW/GREEN 阶段推进(无新测试资产入库;无源码变更)。
+
+### 1.5 状态机阶段分布(全局进度)
+
+| 阶段 | 键数 | 备注 |
+|------|------|------|
+| UNTRACKED | 0 | 需求侧 ⏳ 0 键 |
+| RED | 0 | 无待写红单测键(测试侧) |
+| YELLOW | 0 | 无在途开发(本环境口径) |
+| GREEN | 5 | admin.auth.login / dan.assessment.getActiveMaterial / guide.trainingPlan.getPlanDetail / health.report.createReport / health.report.upload |
+| DONE | 0 | 本轮无归档键 |
+
+> 全局状态机(研发负责人侧口径,引 R165):86 键 RED10/YELLOW53/GREEN8/DONE15 稳态;契约批次 S-cfc-142~151 中 143/144/145/148/150 已转绿,147/151 红例待推进。
+
+### 1.6 数据源健康度
+
+| 数据源 | 读取键数 | 是否正常 | 备注 |
+|--------|----------|----------|------|
+| 需求侧(⏳ wish) | 0 | 正常 | SRS 需求池未启用,合法空 |
+| 契约常量(contract) | 0 | 正常 | 本轮无派单需求 |
+| 测试用例引用(test_case_map) | 1185 | 正常 | 侧车 progress 1185 条未重写 |
+| 执行结果回填(case_results) | 740(实跑)+ 3182(引用) | 正常 | 两端 Jest 全实跑,其余引用 R165 权威 |
+
+---
+
+## 二、向研发提出的改进建议
+
+| 序号 | 建议标题 | 问题描述 | 根因分析 | 建议方案 | 优先级 | 状态 |
+|------|----------|----------|----------|----------|--------|------|
+| 1 | langgraph 上游 LLM 双因(B-142-2 第 11+ 轮,波动) | 51 例 41 过 / 10 红(analyze 1 + auto_tag 5 + intent 4),全为上游 429 配额环境红 | 免费额度耗尽限速 1req/3min;intent_classifier.py:62 兜底伪装 | 运维轮换有效 key + 升级付费额度;测试侧对 401/429 打 xfail 避免配额期误报回归 | P0 | 待处理(波动) |
+| 2 | 契约批次剩余 2 类红例(S-cfc-147/151) | DanAssessmentRecordCreate 4 红 + TaskReviewScP11 3 红,共 7 红为声明内预期 RED | 研发实现/权限流未闭环 | 按 TDD 推进:147 必填守卫/材料有效性/成员-家庭归属;151 审查者角色声明/横向越权 | P1 | 待研发处理 |
+| 3 | 后端未入库测试文件治理(B-162-1) | GrowthPublicEndpointMappingTest 5 errors(超时型)未入库,计入全量 29 红 | 本地工作区遗留测试资产未 add/commit | 测试/研发确认归属:有效则入库,无效则删除 | P1 | 待处理 |
+| 4 | 后端历史 17 红零漂移(第 11 次) | EnergySystemFlow 6 / DimensionRegistryMap 3 / GuideModule / Orchestration×2 / MembershipPaySwitch / PaymentServiceORD / WechatLogin×2 / TeamProfitCron = 17 红 | 历史存量契约/逻辑缺口长期未闭环 | 按既有缺陷台账逐类闭环(Energy 6 首攻) | P2 | 待处理 |
+
+---
+
+## 三、本轮阻塞与风险
+
+| 阻塞项 | 影响范围 | 阻塞类型 | 处置进展 | 需要协调 |
+|--------|----------|----------|----------|----------|
+| 本环境缺 Chromium 二进制(B-51 类沙箱回退) | 浏览器 E2E 本机执行 | 测试(环境) | 本轮回退引用 R165 权威 28/28;本环境 `~/.cache/ms-playwright` 空、无 `playwright-core/.local-browsers` | 在具备 Chromium 的执行节点(desktop204)继续权威复验 |
+| langgraph 251 派发通道(B-55/B-91 类) | cfc-langgraph 51 例实跑复验 | 运维/AI | 251:9000 /health OK 但 251:4090 CLOSED、251:4096 鉴权门控,本环境无凭据 → 引用 R165 41/10 | 运维放通 251 opencode 凭据使 langgraph 经 251 复验 |
+| 189 派发通道(B-56 类) | admin 浏览器套件实派 | 运维 | 189:4090 OPEN 但鉴权门控,本环境无凭据 → 引用 R165 5/5 | 189 注入 opencode 凭据后 admin 可改派减负本机 |
+| nutrition_age_dosage 建表 SQL 无效(B-156-1) | 后端 schema 初始化 | 研发(P1) | 延续 | 研发修 schema.sql + DatabaseInitializer |
+| /api/admin/** 鉴权门(B-142-1) | 管理端接口安全 | 研发(P1 安全) | 大幅改善(S-cfc-143/144/153/154 已转绿);剩余 S-cfc-151 review 权限流 3 红同根 | 研发补 review 权限流 |
+| 后端未入库测试文件(B-162-1) | 后端全量口径漂移 | 测试(P1) | 延续 | 确认入库或删除 |
+| 204 节点失联(B-95) | 204:4090 浏览器自动化节点 | 运维 | 延续;本轮探活 000;189/251 在线 | 运维恢复 204 节点 |
+
+---
+
+## 四、下轮工作计划
+
+| 计划项 | 预计完成时间 | 前置依赖 | 备注 |
+|--------|--------------|----------|------|
+| 后端全量随源变更实跑维持 | 每轮 | — | 源码变更时强制实跑;零变更时采信 + 定向核验 |
+| langgraph 实跑复验 | 每轮 | 运维升级额度/轮换 key | 429 消除后目标 51/51,连续 2 轮销号 B-142-2 |
+| 契约批次剩余 2 类红例跟进 | 每轮 | 研发 TDD 推进 | S-cfc-147(4 红)/ S-cfc-151(3 红)转黄/转绿 |
+| 未入库测试文件归口(B-162-1) | 1 轮内 | 测试/研发确认归属 | 入库或删除,消除口径漂移 |
+| 浏览器 28/28 在具备 Chromium 节点复验 | 每轮 | 节点在线 | admin/frontend/shop/health 连续多轮稳定 |
+
+---
+
+## 五、门禁结论与证据
+
+### 5.1 门禁结论
+
+**⛔ 不通过(有条件通过)(承袭 R165)**。双目标均未完全达成:① 所有用例通过 ❌(58 红:后端 29 + langgraph 10 + fe 3 预期 RED + 根级 16);② 覆盖全部 SRS+用户场景含异常流 ❌(SRS 池未启用=0 锚点)。
+
+**但本轮为稳态零漂移轮**:两端 Jest 实跑严格零漂移(fe 609/3/12、web 116/116),继承 R165 契约批次 11 预期 RED 转绿成果,浏览器/langgraph/后端/根级引用权威值无源码变更故无回归。
+
+**复评条件**:① langgraph 经额度升级后 ≥46/51 且连续 2 轮 51/51;② 契约批次 147/151 红例按 TDD 推进减除;③ 未入库文件归口;④ 后端历史 17 红逐类闭环。
+
+### 5.2 实测明细(证据)
+
+| 维度 | 用例集 | 结果 | 用时 | 说明 |
+|------|--------|------|------|------|
+| **cfc-frontend Jest(本机实跑)** | 本机(cfc-frontend 目录内) | **609 passed / 3 failed / 12 skipped(624 total)** | 79.6s | **与 R165 严格零漂移**;3 红为 S-cfc-132/133 已知预期 RED(growthHistory.dayGroupView RED-A7 + signature.consignee AC-R1/AC-R2) |
+| **cfc-web Jest(本机实跑)** | 本机 | **116 passed / 0 failed(116 total)** | 104s | **零漂移**(连续多轮一致) |
+| 浏览器 admin@189 | playwright.config.live.js --project=admin-desktop | 5 passed(引用 R165) | — | 本环境 189 鉴权门控无凭据 → 引用 R165 5/5(B-153-1 维持) |
+| 浏览器 frontend(本机) | --project=frontend-mobile | 6 passed(引用 R165) | — | 本机无 Chromium → 引用 R165 6/6 |
+| 浏览器 shop(本机) | --project=shop-api | 4 passed(引用 R165) | — | 引用 R165 4/4 |
+| 浏览器 health(本机) | -c playwright.config.health.js | 13 passed(引用 R165) | — | 引用 R165 13/13(B-69 维持销号) |
+| 浏览器 dx(本机) | --project=dx-bridge | 2 skipped(引用 R165) | — | 端点 404(B-DX-1),不假绿 |
+| **langgraph@251** | pytest 51 例 | 41 passed / 10 failed(引用 R165) | — | 251:9000 /health OK 但派发通道受凭据门控 → 引用 R165 41/10(全环境红 429 配额) |
+| **后端全量 mvn test** | cfc-backend surefire 全量 | 3045 passed / 29 failed+error / 4 skipped(3078 total)= 98.93%(引用 R165) | — | 本环境 mvn 不在 PATH 且无源码变更 → 引用 R165 权威值 |
+| 根级黑盒(本机) | cd tests && npx jest -c jest.config.js | 7 passed / 16 failed(23 total)(引用 R165) | — | B-36(9082 未启动) |
+| 线上可达性 | curl /admin /frontend | 302 / 302 | — | 正常(与 R165 一致) |
+
+> **变更触发判定(用户规则「测试结果有变化 → 提交远程 + 通知研发」)**:**未触发**。两端 Jest 实跑与 R165 **严格零漂移**;其余维度因 `HEAD=R165` 零源码变更而引用权威值、无回归;SRS/场景零变更(G12 合规)。按噪声规避口径(同 R82/R86/R103/R112/R118/R127/R137/R148/R151/R156/R161 零漂移轮)**不提交、不推送、不通知**。
+
+---
+
+## 附录
+
+### 附录 A:本轮新增测试用例明细
+
+无(SRS/场景零变更,G12 合规,无新增用例)。
+
+### 附录 B:任务分派与会话恢复明细
+
+| 任务号 | 目标会话标签 | 分派时间 | 分派类型 | 当前状态 | 恢复会话标签 | 恢复原因 | 恢复时间 |
+|--------|--------------|----------|----------|----------|--------------|----------|----------|
+| R166-1 | local-jest(本机) | 08:23 | 直跑(cfc-frontend + cfc-web) | done(79.6s/104s) | — | — | — |
+
+> 浏览器/langgraph/后端/根级因本环境缺 Chromium 二进制与 251·189 opencode 凭据,未派发、未直跑,引用 R165 权威值(非本轮新实测,已显式标注,不写通过)。
+
+### 附录 C:新发现问题明细
+
+| 问题 ID | 能力键/任务号 | 问题类型 | 路由去向 | 登记时间 | 处置状态 | 关联 sha |
+|---------|---------------|----------|----------|----------|----------|----------|
+| 无新增 | — | — | — | — | 本轮零新增缺陷;继承 R165 闭环成果与存量阻塞 | — |
+
+### 附录 D:第二技能加载说明
+
+- `skill_2053082580726448128`:本机 Glob/检索无命中(连续多轮一致),不影响核心闭环;该技能非 TDD 编排/测试闭环必需组件,已按历史口径忽略。
+- 本环境为沙箱执行上下文,缺 Chromium 二进制(`playwright` 1.61.1 客户端在但无浏览器二进制)与 251/189 opencode 派发凭据;建议自动化调度至具备 Chromium 的桌面节点(desktop204)继续浏览器/langgraph 权威复验,以消解本环境环境阻塞项。

+ 276 - 0
docs/tdd/orchestration/report-test-2026-11-12-R167.md

@@ -0,0 +1,276 @@
+# 测试负责人工作汇报(R167 轮)
+
+> 本汇报按《测试负责人工作汇报模板》填写。R167 为**强制实跑轮**:上一轮(R166,08:35)受沙箱限制仅跑两端 Jest、其余维度引用 R165 权威值;本轮补齐后端全量(mvn)、双节点浏览器 E2E(189 实派 + 本机)、langgraph@251 实派、根级黑盒与线上鉴权探针,**所有维度均为本轮新实测**,不再引用历史值。
+
+---
+
+## 基本信息
+
+| 项目 | 内容 |
+|------|------|
+| 汇报人 | 测试负责人(自动化测试闭环任务) |
+| 汇报周期 | 2026年11月12日 08:38 ~ 09:5x(第 167 轮) |
+| 基线 | `cfclub @ 8e4d17e83`(跑前 = origin);跑测窗口内远端前进至 `fef17fd44`(仅 docs + cfc-web 构建元数据,**零功能源码**) |
+| 负责模块/单元 | 全站回归:cfc-backend JUnit 全量 + 管理端 admin + 小程序 H5 frontend(浏览器 E2E:189→admin、本机→admin/frontend/shop/health/dx)+ cfc-langgraph@251 + 前端/Web Jest + 根级黑盒 |
+
+---
+
+## 一、本轮工作数据汇总
+
+### 1.1 测试用例建设
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **本轮新增测试用例数*** | 0 个 | SRS/场景闸门零命中(窗口 `a9ca91323..fef17fd44` specs 201 份 / test-cases 15 份 / API_REFERENCE 全零变更),G12 合规 |
+| **本轮验证执行测试数*** | 3889 个(全部本轮实跑) | 后端 JUnit 3045 + 前端 Jest 624 + 管理端 Jest 116 + 浏览器 E2E 30(28 过 + 2 跳)+ langgraph 51 + 根级黑盒 23 |
+| **用例通过率** | 98.23%(3820/3889;剔除 skip 98.68%) | 红 51 / 跳 18,明细见 §5.2;红例含预期 RED 与已知存量,门禁见 §5.1 |
+
+### 1.2 会话与任务分发
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **分派任务数*** | 2 个 | R167-1 → `opencode-189`(admin-desktop,首跑 + 复跑共 2 次派发);R167-2 → `opencode-251`(langgraph pytest kick+read)。本机承担 fe/shop/health/dx/admin 串行执行 |
+| **恢复智能体会话数*** | 1 个 | 189 admin 首跑 2 例失败(account-roles 502),复跑取回 5/5 → 判定节点侧瞬态,非用例回归 |
+| **当前在用会话数** | 0 个 | 全部任务收尾,无残留浏览器任务(符合「每节点仅一任务」约束) |
+
+### 1.2b 各会话当前工作状态列表
+
+| 会话标签 | 会话 ID/地址 | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
+|----------|--------------|----------|----------|---------------|----------|------|
+| `opencode-189` | 192.168.16.189:4090 | done | admin-desktop UI E2E | 已完成(首跑 28s + 复跑 73s) | `C:\code\cfc\tests` | 首跑 3/5(account-roles 502)→ 复跑 **5/5 EXIT=0**;spec blob `4703d73fb` = 本机 |
+| `opencode-251` | 192.168.16.251:4096 | done | langgraph pytest 51 例 | 已完成(165.32s) | `/sc-data/cfc/cfc-langgraph` | **47 过 / 4 红**;节点 HEAD `fef17fd44`(tests 目录零差异,结论可比) |
+| `local-browser` | 本机进程 | done | admin / frontend / shop / health / dx | 已完成(1.8m + 58.1s + 18.2s + 13.9s + 跳过) | `d:\cfc\tests` | 28 过 + 2 跳(dx 404);Chromium 二进制在 `%LOCALAPPDATA%\ms-playwright`(R166「无 Chromium」为探测路径错误) |
+| `local-mvn` | 本机进程 | done | cfc-backend 全量 | 已完成(60:00(08:44→09:44)) | `d:\cfc\cfc-backend` | 13 红类:存量 17 例(EnergySystem 6 / DimensionRegistryMap 3 / Orchestration 2 / WechatLogin 2 / MembershipPay 1 / PaymentORD 1 / TeamProfitCron 1 / GuideModule 1)**第 15 次零漂移** + 预期 RED 6 例(S-cfc-147 DanAssessment 4 / S-cfc-151 TaskReview 2)+ 未入库文件 5 errors(GrowthPublicEndpointMappingTest,B-162-1);361/361 XML 全产出、2121+367 源 0 编译错、dump 0 |
+| `local-jest` | 本机进程 | done | cfc-frontend + cfc-web + 根级 | 已完成(42.2s / 40.2s / 5.0s) | `d:\cfc\cfc-frontend`、`cfc-web`、`tests` | fe 609/3/12、web 116/116、根级 7/16(9082 未起,B-36) |
+
+### 1.3 问题处置
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **新测试发现问题数*** | 3 个 | B-167-1(189 节点 account-roles 502 瞬态)· B-167-2(251 live chat/analyze 120s 零字节)· B-167-3(R166 沙箱误判「无 Chromium」被本轮实测推翻) |
+| **已解决测试相关问题数*** | 2 个 | **B-142-1 闭环**(`/api/admin/families/overview` 匿名由「200 + code:400」转为 **401**,6 端点全 401)· B-51 类「本机无 Chromium」误判消除(改为探测路径口径) |
+| **待解决测试相关问题数** | 6 个(P0×1 / P1×3 / P2×2) | ① B-142-2 langgraph LLM 配额(P0);② B-156-1 建表 SQL 无效(P1);③ B-162-1 未入库测试文件(P1);④ B-152-1/2 CI 排除清单双向失真(P1);⑤ B-167-2 live LLM 挂死(P2,与①同源);⑥ B-36 根级 16 红(P2) |
+
+### 1.4 本轮 git 提交与推送证据(真理证据)
+
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
+|----------|-----------------|------|--------------|----------|------------|------|
+| (待提交) | 全站巡检 R167 | 汇报 | 测试文档(docs/tdd + 台账)+ 归档 2 份游离报告 | cfclub | (待推送) | 结果有变化(B-142-1 闭环 / langgraph 41→47 / 新增 3 条 blocker)→ 按规则提交并通知研发 |
+
+### 1.5 状态机阶段分布(全局进度)
+
+| 阶段 | 键数 | 备注 |
+|------|------|------|
+| UNTRACKED | 0 | 需求侧 ⏳ 0 键 |
+| RED | 0 | 测试侧无待写红单测键 |
+| YELLOW | 63 | 研发侧口径(引 R143 研发负责人汇报):等待实现/待测试 mark-green |
+| GREEN | 8 | 已实现待部署归集 |
+| DONE | 15 | 已归档 |
+| 合计 | 86 | RED0/YELLOW63/GREEN8/DONE15,本轮零流转 |
+
+### 1.6 数据源健康度
+
+| 数据源 | 读取键数 | 是否正常 | 备注 |
+|--------|----------|----------|------|
+| 需求侧(SRS) | 201 份 specs | 正常 | 窗口零变更 |
+| 用例台账(test-cases) | 15 份 / 356 唯一 TC | 正常 | 1774 行,未改写 |
+| 场景(SC) | 164 个唯一 ID | 正常 | 被 TC 引用 92 个(56.1%) |
+| 执行结果回填 | 3889 例 | 正常 | 全维度本轮实跑,无引用值 |
+
+---
+
+## 二、向研发提出的改进建议
+
+| 序号 | 建议标题 | 问题描述 | 根因分析 | 建议方案 | 优先级 | 状态 |
+|------|----------|----------|----------|----------|--------|------|
+| 1 | langgraph 上游 LLM 配额(B-142-2 第 15+ 轮) | 51 例 47 过 / 4 红(auto_tag 3 + intent 1),日志 `429 AgnesAI free limit` ×2、`401 ****ab12 invalid` ×1;同窗口 `/health` 200/24ms 但 `chat`/`analyze` **120s 零字节**(B-167-2) | 免费额度耗尽 → 客户端长退避挂死;`intent_classifier.py:62` 捕获异常后静默兜底 chat,把 429 伪装成「分类错误」 | 运维轮换有效 key + 升级额度;`intent_classifier` 兜底前必须记录上游状态码并对 429/401 显式抛错,禁止静默降级 | P0 | 待处理 |
+| 2 | `nutrition_age_dosage` 建表恒失败(B-156-1 第 3 轮) | `schema.sql:5345-5354` 建表列清单无 `product_id`,却声明 `INDEX idx_product (product_id)` → 每次上下文启动 `SQLSyntaxErrorException`,`DatabaseInitializer` catch 后仍打「数据表检查完成」 | DDL 与列定义不一致 + 初始化异常被静默吞掉 | 删该 INDEX 或补 `product_id BIGINT` 列;`DatabaseInitializer` 对建表失败须 fail-fast 或至少 ERROR 级日志 | P1 | 待处理 |
+| 3 | 未入库测试文件污染全量口径(B-162-1 第 3 轮) | `GrowthPublicEndpointMappingTest`(5 例)`git ls-files` 零命中,仅存在于主工作区,占 396.4s 且 5 errors 计入红例 | 工作区遗留测试资产未 add/commit(与 B-23/B-26 同源) | 确认归属:有效则入库、无效则删除;跑测前用 `git status --short src/test` 断言干净 | P1 | 待处理 |
+| 4 | CI 排除清单双向失真(B-152-1/2 第 4 轮) | `.gitlab-ci.yml:61` `BACKEND_OBSERVED_CLASSES`(33 类)与本轮实测红类做双向差集:漏拦当前红类、并含大量已绿类 | 清单按「某轮快照」人工维护,无自动对表 | 每次全量后由脚本生成 `red-classes.txt` 并 diff CI 清单,差集非空即失败 | P1 | 待处理 |
+| 5 | 契约批次剩余红例(S-cfc-147/151) | DanAssessmentRecordCreate 4 红 + TaskReviewScP11 3 红(声明内预期 RED) | 必填守卫/材料有效性/成员-家庭归属、审查者角色与横向越权未实现 | 按 TDD 推进至 GREEN;`TaskController.reviewTask` 已补 3 参重载,余 2 参入口语义待收敛 | P1 | 待处理 |
+| 6 | 后端历史存量 17 红(第 15 次零漂移) | EnergySystemFlow 6 / DimensionRegistryMap 3 / Orchestration 2 / WechatLogin 2 / MembershipPay 1 / PaymentORD 1 / TeamProfitCron 1 / GuideModule 1 | 历史契约/逻辑缺口长期未闭环 | 按缺陷台账逐类闭环,Energy 6 首攻(收益最大) | P2 | 待处理 |
+
+---
+
+## 三、本轮阻塞与风险
+
+| 阻塞项 | 影响范围 | 阻塞类型 | 处置进展 | 需要协调 |
+|--------|----------|----------|----------|----------|
+| 189 节点 `account-roles` 502(B-167-1) | admin 登录链路 E2E | 环境/网络 | 首跑 2 例红 → 本机直连 4/4=200、189 复跑 5/5 → 判节点侧网关瞬态,已给用例加「502 退避重试」建议 | 运维排查 189 出网链路 |
+| 251 live LLM 挂死(B-167-2) | langgraph 在线对话/解析 | 运维/AI | `/health` 200 而 `chat`/`analyze` 120s 零字节,与 pytest 429 同源 | 升级配额/轮换 key |
+| `nutrition_age_dosage` 建表失败(B-156-1) | 后端 schema 初始化 | 研发(P1) | 延续第 3 轮未修 | 研发修 schema.sql |
+| 后端未入库测试文件(B-162-1) | 全量口径漂移 | 测试(P1) | 延续;本轮仍在编译执行(5 errors/396s) | 确认入库或删除 |
+| 204 节点失联(B-95) | 204:4090 浏览器节点 | 运维 | 本轮探活 000;189/251 在线 | 运维恢复 204 |
+| 根级 16 红(B-36) | 根级黑盒套件 | 测试/环境 | 9082 未启动,全 `fetch failed`;连续第 51 轮 | 提供常驻 9082 或改用 mock |
+
+---
+
+## 四、下轮工作计划
+
+| 计划项 | 预计完成时间 | 前置依赖 | 备注 |
+|--------|--------------|----------|------|
+| 后端全量随源变更实跑维持 | 每轮 | — | 零源码变更轮可采信,但连续采信不超过 2 轮 |
+| langgraph 实跑复验 + live 端点复探 | 每轮 | 运维升级额度/轮换 key | 429 消除后目标 51/51,连续 2 轮销号 B-142-2 |
+| 契约批次 S-cfc-147/151 红例跟进 | 每轮 | 研发 TDD 推进 | 7 红转黄/转绿 |
+| 锚点补齐(G9/G14) | 2 轮内 | 测试侧 | 优先 0 锚点台账:vendor 0/17、health-datasource-bridge 0/17、deep-dive-plan-activation 0/6 |
+| 浏览器 30 例(含 dx)在 204 恢复后三节点分摊 | 每轮 | 204 在线 | 现由 189 + 本机双节点承担 |
+
+---
+
+## 五、门禁结论与证据
+
+### 5.1 门禁结论
+
+**⛔ 不通过(有条件)**。双目标仍未完全达成:① 所有用例通过 ❌(红 51 例:后端 28 + langgraph 4 + 前端 3 预期 RED + 根级 16);② 覆盖全部 SRS+场景含异常流 ❌(严格可执行锚点 66/356 = 18.5%,场景被 TC 映射 92/164 = 56.1%)。
+
+**本轮最大正向**:**B-142-1 `/api/admin/**` 鉴权门闭环** —— 6 个匿名 POST 端点全部 401(历轮 `/api/admin/families/overview` 长期 200 + code:400);langgraph 由 41/10 回升至 **47/4**;189 与 251 双节点派发全通(G10 ✅)。
+
+**复评条件**:① langgraph 连续 2 轮 51/51;② 后端红例降至 ≤10(先闭环 EnergySystemFlow 6);③ 严格锚点 ≥40%;④ CI 排除清单双向差集为空。
+
+### 5.2 实测明细(证据)
+
+| 维度 | 用例集 | 结果 | 用时 | 说明 |
+|------|--------|------|------|------|
+| **后端全量** | `cd cfc-backend && mvn -o -B clean test`(JDK1.8.0_25 + Maven 3.6.1) | **361 类 / 3045 例 / 3013 过 / 22F + 6E + 4S = 98.95%**(剔 skip 99.05%) | 60:00(08:44→09:44) | 13 红类:存量 17 例(EnergySystem 6 / DimensionRegistryMap 3 / Orchestration 2 / WechatLogin 2 / MembershipPay 1 / PaymentORD 1 / TeamProfitCron 1 / GuideModule 1)**第 15 次零漂移** + 预期 RED 6 例(S-cfc-147 DanAssessment 4 / S-cfc-151 TaskReview 2)+ 未入库文件 5 errors(GrowthPublicEndpointMappingTest,B-162-1);361/361 XML 全产出、2121+367 源 0 编译错、dump 0 |
+| **cfc-frontend Jest** | 42 套件 | **609 passed / 3 failed / 12 skipped(624)** | 42.2s | 3 红 = S-cfc-132/133 预期 RED(`RED-A7`、`AC-R1`、`AC-R2`,组件 `consignee-edit.vue`/`health-plan-summary.vue` 未交付) |
+| **cfc-web Jest** | 17 套件 | **116 passed(116)** | 40.2s | 连续多轮零漂移 |
+| 浏览器 admin@189 | `--project=admin-desktop` | **5 passed(复跑,EXIT=0)** | 1.2m | 首跑 3/5(account-roles 502,B-167-1);spec blob `4703d73fb` 与本机一致 |
+| 浏览器 admin(本机) | `--project=admin-desktop` | **5 passed** | 1.8m | 与 189 互为对照,证明 502 为节点侧 |
+| 浏览器 frontend(本机) | `--project=frontend-mobile` | **6 passed** | 58.1s | TC-F-U01~U06 |
+| 浏览器 shop(本机) | `--project=shop-api` | **4 passed** | 18.2s | 价格排序契约 |
+| 浏览器 health(本机) | `-c playwright.config.health.js` | **13 passed** | 13.9s | 华为/小米/健康方案鉴权契约全 401 |
+| 浏览器 dx(本机) | `--project=dx-bridge` | **2 skipped** | — | 端点 404(B-DX-1),不假绿 |
+| **langgraph@251** | `pytest -q --ignore=tests/qna --ignore=tests/test_chat.py` | **47 passed / 4 failed(51)** | 165.32s | 4 红全环境:`429 AgnesAI free limit` ×2 + `401 ****ab12` ×1;`EXIT=` 未落盘(B-126 复现) |
+| 根级黑盒(本机) | `cd tests && npx jest -c jest.config.js` | **7 passed / 16 failed(23)** | 5.0s | 9082 未启动,全 `fetch failed`(B-36 第 51 轮) |
+| 线上可达性 | GET `/admin` `/frontend` `/` | 302 / 302 / 404 | — | 与 R165 一致(B-141-3) |
+| 线上鉴权 | 6 个匿名 POST | **6/6 = 401** | — | mind/fortune、energy/overview、health/plan/list、huawei、xiaomi、**admin/families/overview** → B-142-1 闭环 |
+
+> **变更触发判定**:**已触发** —— B-142-1 闭环(鉴权语义变化)+ langgraph 41→47 + 新增 3 条 blocker + 2 份游离报告归档 → 提交远程并通知研发。
+
+### 5.3 20 类测试覆盖矩阵(三态:已发现 / 未发现 / 待核实)
+
+| # | 类别 | 状态 | 证据(本轮实测) |
+|---|------|------|------------------|
+| 1 | 单元测试 | ✅ 已发现 | 后端 361 类 / 3045 例;前端 42 套 624 例;管理端 17 套 116 例 |
+| 2 | 测试覆盖率 | ⚠️ 待核实 | cfc-web 实测 10.08/6.06/7.48/9.95(Stmts/Branch/Func/Lines);后端 `pom.xml` 无 JaCoCo 插件(`grep -c jacoco` = 0)→ 后端覆盖率**未发现度量手段** |
+| 3 | 变异测试 | ❌ 未发现 | 三个模块 `pom.xml`/`package.json` 均无 pitest/stryker 配置 |
+| 4 | 集成测试 | ✅ 已发现 | `src/test/**/integration/**` 61 个类;本轮 GuideModule/EnergySystem 等实跑 |
+| 5 | 契约测试 | ✅ 已发现 | `*ContractTest.java` **107 个类**;本轮 13 红类中 5 个为契约类 |
+| 6 | 接口 API 测试 | ✅ 已发现 | health 套件 13 例(华为/小米/健康方案鉴权契约)+ shop 4 例排序契约 |
+| 7 | 系统/端到端 | ✅ 已发现 | Playwright 30 例(admin 5×2 节点、fe 6、shop 4、health 13、dx 2 跳) |
+| 8 | 验收 UAT | ❌ 未发现 | 无 UAT 计划/签收记录资产 |
+| 9 | BDD 规格 | ❌ 未发现 | 无 `.feature` 文件;场景以 Markdown 表述 |
+| 10 | 冒烟测试 | ✅ 已发现 | `tests/playwright.config.smoke.js` + `tests/e2e/ci-smoke.spec.js`(本质检未重跑) |
+| 11 | 回归测试 | ✅ 已发现 | CI `backend-observed-junit` / `tests-jest-observed` + 本轮全量回归 |
+| 12 | 探索性测试 | ❌ 未发现 | 无 charter/会话记录资产 |
+| 13 | 性能测试 | ❌ 未发现 | 无 k6/JMeter/Gatling 脚本;`ActivityControllerTest` 304s 类属单测耗时非压测 |
+| 14 | 可靠性测试 | ❌ 未发现 | 无故障注入/长稳/重试策略验证资产 |
+| 15 | 安全测试 | ❌ 未发现 | `.gitlab-ci.yml` 无 sast/gitleaks/dependency 作业(`grep -c` = 0);本轮仅有 6 端点匿名鉴权探针 |
+| 16 | 兼容性测试 | ❌ 未发现 | Playwright 仅 chromium 单浏览器;无设备/分辨率矩阵 |
+| 17 | 可用性测试 | ❌ 未发现 | 无可用性任务/问卷资产 |
+| 18 | 无障碍测试 | ❌ 未发现 | 无 axe/pa11y 配置与断言 |
+| 19 | QA 流程 | ✅ 已发现 | `blockers.md`(B-1~B-167 台账)+ `automation-status.md` + 研发/测试交接通知 |
+| 20 | 质量指标 | ⚠️ 待核实 | `docs/tdd/tools/test_report_metrics.py` 存在但**运行零 stdout**(B-124 第 6 轮),度量靠内联统计复算 |
+
+### 5.4 五要素问题清单
+
+**① langgraph 上游 LLM 配额导致 4 例环境红(B-142-2 / B-167-2)**
+- 问题描述:251 实派 51 例 47 过 4 红;日志 `429 AgnesAI free limit` ×2、`401 api key ****ab12 invalid` ×1;同窗口 `/health` 200/24ms 而 `POST /api/v1/chat`、`/api/v1/analyze` **120s 零字节**。
+- 测试 bug 点:`tests/test_auto_tag.py::test_auto_tag_endpoint_responds`、`test_auto_tag_valid_format`、`test_auto_tag_empty_content`、`tests/test_intent.py::test_classify_recommend`(断言取真实 LLM 返回,未隔离上游)。
+- 最优修改方案:对这 4 例注入 stub LLM client(`respx`/`monkeypatch` 拦截 `AgnesAI` 端点),保留 1 例真实链路用例并标 `@pytest.mark.live`;`intent_classifier.py:62` 兜底前记录上游状态码,429/401 显式抛出而非默认 `chat`。
+- 修改目的:把「配额波动」与「代码回归」解耦,使 G7 可判定;同时消除静默兜底掩盖的真实故障。
+- 闭环:stub 后 51/51 连续 2 轮全绿 → 销号 B-142-2;运维侧额度恢复后 `@live` 用例单跑通过。
+
+**② 未入库测试文件污染全量口径(B-162-1)**
+- 问题描述:`GrowthPublicEndpointMappingTest`(5 例)`git ls-files` 零命中,仅存于主工作区;本轮耗 396.4s、5 errors 全计入红例。
+- 测试 bug 点:`cfc-backend/src/test/java/com/etotem/cfc/config/GrowthPublicEndpointMappingTest.java`(未跟踪);断言依赖 `ServletRequestPathUtils.PATH` 请求属性,在 standalone MockMvc 下恒缺失。
+- 最优修改方案:确认归属——有效则以 `MockMvcBuilders.webAppContextSetup` 或显式 `ServletRequestPathUtils.parseAndCache` 修正后入库;无效则删除文件。
+- 修改目的:消除「同名不同版」口径漂移,避免红例数被不可复现资产污染。
+- 闭环:`git status --short cfc-backend/src/test` 为空 + 全量红例由 28 → 23 → 复算一致。
+
+**③ `nutrition_age_dosage` 建表恒失败(B-156-1,第 3 轮)**
+- 问题描述:`schema.sql:5345-5354` 列清单无 `product_id`,却声明 `INDEX idx_product (product_id)` → 34 次上下文启动均 `SQLSyntaxErrorException`,`DatabaseInitializer` catch 后仍打印「数据表检查完成」,表从未创建。
+- 测试 bug 点:无 DDL 冒烟用例;`DatabaseInitializer` 无「建表成功」断言。
+- 最优修改方案:删该 INDEX 或补 `product_id BIGINT` 列(与实体 `NutritionAgeDosage.java` 对齐);`DatabaseInitializer` 对建表失败改为 ERROR/WARN 可观测,并新增 1 条 `schema-ddl-smoke` 用例逐表 `SHOW TABLES`。
+- 修改目的:让 schema 缺陷在启动阶段即暴露,而非等业务查询 `Unknown column`。
+- 闭环:启动日志 `SQLSyntaxErrorException` 计数 = 0 且 `SHOW TABLES LIKE 'nutrition_age_dosage'` 命中。
+
+**④ CI 排除清单双向失真(B-152-1/2,第 4 轮)**
+- 问题描述:`.gitlab-ci.yml:61` 清单 33 类 vs 实测红类 13 类 → **漏拦 6 类**(GrowthPublicEndpointMappingTest、UserServiceWechatLoginTest、UserServiceWechatLoginContractTest、DanAssessmentRecordCreateContractTest、TaskReviewScP11ContractTest、TeamProfitCronContractTest)→ `backend-blocking-junit` 必然失败;同时 **26 类已转绿仍被排除** → 门禁覆盖被人为缩小。
+- 测试 bug 点:CI 变量为静态快照,无自动对表机制。
+- 最优修改方案:全量跑完后由脚本产出 `red-classes.txt`,CI 增加 `diff` 步骤:`实测红类 − 清单` 与 `清单 − 实测红类` 任一非空即 fail(并输出差异)。
+- 修改目的:把「已知红类白名单」从人工维护变为机器校验,恢复门禁有效性。
+- 闭环:双向差集为空且 `backend-blocking-junit` 在 GREEN 类上通过。
+
+**⑤ 189 节点 `account-roles` 502 瞬态(B-167-1)**
+- 问题描述:首跑 TC-A-U04/U05 失败,断言「account-roles 接口应 200」实得 502;本机直连同端点 4/4=200,189 复跑 5/5。
+- 测试 bug 点:`tests/e2e-live/admin-live.spec.js:160/188` 对 `account-roles` 只接受 200,无 5xx 退避。
+- 最优修改方案:`fillPhoneAndAwaitRoles` 内对 502/503 做 2 次指数退避重试;仍失败则输出节点网络证据(响应头/耗时)而非仅断言码。
+- 修改目的:区分「节点网络瞬态」与「接口契约回归」,避免环境抖动被记成产品缺陷。
+- 闭环:连续 3 轮 189 首跑 5/5(本轮记观察 1/3)。
+
+**⑥ 可执行锚点覆盖率不足(G9)**
+- 问题描述:356 条台账 TC 中仅 66 条在测试资产中可定位(18.5%);`vendor.md` 0/17、`health-datasource-bridge.md` 0/17、`deep-dive-plan-activation.md` 0/6、`teacher.md` 3/43、`admin.md` 5/38。
+- 测试 bug 点:用例标题未内嵌 TC 编号,资产侧无 `@TC-*` 约定(B-30 同源)。
+- 最优修改方案:按台账分域补锚点,优先级 0 锚点三本(vendor / health-datasource-bridge / deep-dive-plan-activation);每例测试首行注释 `// TC-XXX-nn`。
+- 修改目的:使「需求→TC→资产」可反向追溯,把覆盖率从「用例数」升级为「需求覆盖」。
+- 闭环:严格锚点 ≥ 40%(≥143/356)且三本 0 锚点台账归零。
+
+**⑦ 契约口径待裁决(DimensionRegistryMap 3 红,P-9 第 10 轮)**
+- 问题描述:`map_emptyLegacy_returnsNullData` 期望 `$.data` 为 `null` 实得 `""`;`map_missingLegacy_returnsBadRequest` 期望 400 实得 200;`map_unknownLegacy_returnsNullData` 期望 null 实得原值。
+- 测试 bug 点:`integration/controller/DimensionRegistryMapContractTest`(3 例),契约文本未明确「空/缺参/未知值」三态语义。
+- 最优修改方案:由产品/研发确认三态契约后二选一——改实现或改断言,并在 `API_REFERENCE.md` 固化。
+- 修改目的:结束同一契约连续 10 轮「红但无人认领」的状态。
+- 闭环:契约文本落定 + 用例与实现一致 + 连续 2 轮绿。
+
+**⑧ TaskReview 横向越权未拦截(S-cfc-151,2 红)**
+- 问题描述:`permission_crossFamilyReview_mustBeRejected` 无审批人身份时 `reviewTask` 直接放行并进入发分链路;`permission_handler_mustDeclareReviewerIdentity` 控制器未声明身份参数。
+- 测试 bug 点:`unit/TaskReviewScP11ContractTest`(2 例)。研发 `f139a05a2` 已补 3 参重载(3 红 → 2 红)。
+- 最优修改方案:控制器 `reviewTask` 增加 `@RequestAttribute("userId")`,服务层 `isQualifiedReviewer` 校验审批人属该家庭/角色,2 参入口仅作兼容并禁用发分。
+- 修改目的:封堵跨家庭越权审批(安全缺陷,P1)。
+- 闭环:2 例转绿 + 补充「跨家庭/匿名/非家长」三类负向用例。
+
+### 5.5 覆盖缺口清单
+
+| 缺口类型 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
+|----------|------|------|--------------|--------|----------|
+| 需求锚点(G9) | 严格 66/356 = 18.5% | 无法回答「哪些 SRS 场景无自动化」 | 分域补 `TC-*` 注释锚点,先攻 0 锚点三本 | P1 | 锚点 ≥40% |
+| 场景映射 | 164 场景中被 TC 引用 92(56.1%) | 44% 场景无用例 | 反向核对脚本产出「场景→TC→资产」缺口表 | P1 | 映射 ≥80% |
+| 后端覆盖率 | 无 JaCoCo | 无法量化单测有效性 | pom 增 jacoco-maven-plugin,阈值先设 40% 观察 | P2 | 覆盖率报告入库 |
+| 变异测试 | 无 | 断言强度未知 | 先对 `service/` 3 个核心类试点 pitest | P3 | 变异得分 ≥50% |
+| 性能/可靠性 | 无脚本 | 无容量与恢复证据 | k6 脚本覆盖 `/api/energy/overview` 等 5 高频接口 | P2 | 基线 P95 入库 |
+| 安全扫描 | CI 无 sast/依赖扫描 | 供应链与明文凭据风险(B-31) | CI 加 gitleaks + dependency-check(需授权联网) | P1 | 作业为绿 |
+| 兼容性/无障碍 | 仅 chromium | 移动端/无障碍无证据 | 增 webkit+firefox project;axe 断言静态页 | P3 | 矩阵入库 |
+| UAT/BDD/探索性 | 无资产 | 验收与探索无记录 | 每里程碑 1 份 UAT 清单 + 1 次 60min 探索会话记录 | P3 | 记录入库 |
+
+---
+
+## 附录
+
+### 附录 A:本轮新增测试用例明细
+
+无。SRS/场景窗口零变更,按 G12 不新增用例;覆盖缺口已转 §五 缺口清单与下轮计划(锚点补齐)。
+
+### 附录 B:任务分派与会话恢复明细
+
+| 任务号 | 目标会话标签 | 分派时间 | 分派类型 | 当前状态 | 恢复会话标签 | 恢复原因 | 恢复时间 |
+|--------|--------------|----------|----------|----------|--------------|----------|----------|
+| R167-1 | opencode-189 | 08:44 / 09:0x | shell 派发(PowerShell) | done 5/5 | opencode-189 | 首跑 2 例 502 失败 → 复跑取证 | 09:0x |
+| R167-2 | opencode-251 | 08:55 | kick(setsid 分离)+ 单次读 | done 47/4 | — | — | — |
+| R167-3 | local-browser | 08:47~09:20 | 直跑(串行) | done 28 过 + 2 跳 | — | — | — |
+| R167-4 | local-mvn | 08:44 | 直跑(后台) | done | — | — | — |
+
+### 附录 C:新发现问题明细
+
+| 问题 ID | 能力键/任务号 | 问题类型 | 路由去向 | 登记时间 | 处置状态 | 关联 sha |
+|---------|---------------|----------|----------|----------|----------|----------|
+| B-167-1 | admin 登录链路 | 环境/网络(189 account-roles 502) | 运维 | 08:47 | 观察(复跑通过) | `8e4d17e83` |
+| B-167-2 | langgraph live chat/analyze | 运维/AI(120s 零字节) | 运维 | 09:22 | 待处理(与 B-142-2 同源) | `fef17fd44` |
+| B-167-3 | R166 结论勘误 | 测试(无 Chromium 误判) | 测试侧已纠正 | 08:40 | 已闭环 | — |
+
+### 附录 D:口径与命令
+
+- 后端:`cd cfc-backend`(**Maven 工程根在此,非仓库根**)+ `JAVA_HOME=/d/jdk1.8.0_25` + `/d/maven/apache-maven-3.6.1/bin/mvn -o -B clean test`
+- Playwright 必须在 `tests/` 目录内跑(根目录会因 `@playwright/test` 双版本报 `test.describe() called here`)
+- 251 派发:`POST /api/shell?location[directory]=<dir>` + `setsid nohup` 分离 + 本地等待后单次读日志(禁轮询建 shell,B-125)
+- 锚点双口径(B-124 延续):严格 66/356 = 18.5%(排除 `tests/e2e/api/generated`);宽 325/356 = 91.3%(含 generated 虚高,不作门禁依据)

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

@@ -1004,3 +1004,10 @@
 | **B-142-1-Update(第 16 轮,收窄)** | `/api/admin/**` 鉴权门缺失 | 研发(P1 安全) | **大幅改善**。S-cfc-143/144 修复转绿(JwtInterceptor 收口 /api/admin/ 前缀 + admin 角色守卫生效);剩余 S-cfc-151 review 权限流 3 红同根。 | 测试(R165 复核) | 2026-11-12 08:15 | 待处理(收窄) |
 | **B-142-1-Update(第 16 轮,收窄)** | `/api/admin/**` 鉴权门缺失 | 研发(P1 安全) | **大幅改善**。S-cfc-143/144 修复转绿(JwtInterceptor 收口 /api/admin/ 前缀 + admin 角色守卫生效);剩余 S-cfc-151 review 权限流 3 红同根。 | 测试(R165 复核) | 2026-11-12 08:15 | 待处理(收窄) |
 | **B-153-1-Update(第 8 轮销号维持)** | 189 admin U05 前置偶发 | 测试(观察项) | **维持销号**。连续 8 轮首轮即 5/5(本轮 1.3m)。 | 测试(R165 实派) | 2026-11-12 08:15 | 已销号 |
 | **B-153-1-Update(第 8 轮销号维持)** | 189 admin U05 前置偶发 | 测试(观察项) | **维持销号**。连续 8 轮首轮即 5/5(本轮 1.3m)。 | 测试(R165 实派) | 2026-11-12 08:15 | 已销号 |
 | **R165 门禁** | 全量 3922 / 3846 | 测试 | **不通过(承袭)**。✅G1 98.51%/G4 116/G5 编译(surefire 红仅测试)/G6 28-28/G8 5-5/G10 三节点/G12;❌G2 58 红(后端 29+lg 10+fe 3+根级 16)/G7 41-51/G9/G11/G14;⚠️G3 3 预期 RED。变化 = 契约批次 11 红闭环(正向)+ langgraph 8→10 红(环境波动)。 | 测试(R165 闭环) | 2026-11-12 08:15 | 已记录 |
 | **R165 门禁** | 全量 3922 / 3846 | 测试 | **不通过(承袭)**。✅G1 98.51%/G4 116/G5 编译(surefire 红仅测试)/G6 28-28/G8 5-5/G10 三节点/G12;❌G2 58 红(后端 29+lg 10+fe 3+根级 16)/G7 41-51/G9/G11/G14;⚠️G3 3 预期 RED。变化 = 契约批次 11 红闭环(正向)+ langgraph 8→10 红(环境波动)。 | 测试(R165 闭环) | 2026-11-12 08:15 | 已记录 |
+| **B-167-1** | 189 admin `account-roles` 502 | 环境/网络(P2) | 08:47 首派 189 `admin-desktop` **3/5**:TC-A-U04/U05 均在 `admin-live.spec.js:160/188` 断言「account-roles 接口应 200」处收 **502**。同窗口本机直连 `POST http://cfc.iwintrue.com/api/admin-auth/account-roles` **4/4 = 200**(0.32~1.18s),本机 Playwright admin **5/5**、189 复跑 **5/5 EXIT=0** → 判**节点侧网关瞬态**,非契约回归。建议用例对 502/503 加 2 次指数退避,仍失败则输出响应头/耗时证据。 | 测试(R167 实测) | 2026-11-12 08:47 | 观察 1/3(连续 3 轮首跑 5/5 才销号) |
+| **B-167-2** | 251 live `chat`/`analyze` 挂死 | 运维/AI(P1) | 09:22 探活:`http://192.168.16.251:9000/health` **200 / 23.9ms**,但 `POST /api/v1/chat`(`query/user_id/conversation_id` 正确 schema)与 `POST /api/v1/analyze`(`report_id/user_id`)**均 120s 零字节(000)**。与同轮 pytest 日志 `429 AgnesAI free limit` ×2 + `401 ****ab12 invalid` ×1 同源:配额耗尽 → LLM 客户端长退避,表现为端点挂死。**B-90 状态反转**(历轮记销号,本轮 live 端点不可用)。 | 测试(R167 实测) | 2026-11-12 09:22 | 待处理(归 B-142-2 运维侧) |
+| **B-167-3** | R166「本机无 Chromium」结论勘误 | 测试(P3) | R166(08:35)记「`~/.cache/ms-playwright` 空、无 `playwright-core/.local-browsers` → 浏览器 E2E 未执行,引用 R165」。R167 实测 Windows 默认路径 **`C:/Users/iwt/AppData/Local/ms-playwright`** 下有 `chromium-1228 / chromium-1243 / chromium_headless_shell-*`,本机 admin 5/5、fe 6/6、shop 4/4、health 13/13、dx 2 skip 全部实跑成功 → **R166 的「缺 Chromium」为探测路径错误**(Linux 路径套用到 Windows)。 | 测试(R167 实测) | 2026-11-12 08:40 | 已闭环(口径纠正,SOP 增补 Windows 默认路径) |
+| **B-142-1-Close(第 17 轮,闭环)** | `/api/admin/**` 鉴权门缺失 | 研发(P1 安全) | **已闭环**。R167 匿名 POST 六端点全部 **401**:`/api/mind/fortune`、`/api/energy/overview`、`/api/health/plan/list`、`/api/huawei-health/status`、`/api/xiaomi-health/status`、**`/api/admin/families/overview`**(历轮长期 200 + `code:400`)。对应修复 `45b29e5f8`(JwtInterceptor 收口 `/api/admin/` 前缀)+ 角色守卫。G8 由 ⚠️ 转 ✅。 | 测试(R167 实测) | 2026-11-12 09:20 | **已解除** |
+| **B-156-1-Update(第 3 轮)** | `nutrition_age_dosage` 建表恒失败 | 研发(P1 数据) | **仍未修**。`schema.sql:5345-5354` `CREATE TABLE nutrition_age_dosage` 列清单无 `product_id`,仍声明 `INDEX idx_product (product_id)`;本轮 361 类全量期间每次上下文启动仍触发 `SQLSyntaxErrorException`,`DatabaseInitializer` catch 后继续打印「数据表检查完成」。实体 `NutritionAgeDosage.java` 另有 `updateTime` 而 DDL 无 `update_time`(建表成功后仍会 `Unknown column`)。 | 测试(R167 实测) | 2026-11-12 09:44 | 待处理 |
+| **B-152-1/2-Update(第 4 轮,恶化)** | CI `BACKEND_OBSERVED_CLASSES` 双向失真 | 研发(P1 门禁) | 本轮实测红类 **13** vs `.gitlab-ci.yml:61` 清单 **33**:**漏拦 6 类**(`GrowthPublicEndpointMappingTest`、`UserServiceWechatLoginTest`、`UserServiceWechatLoginContractTest`、`DanAssessmentRecordCreateContractTest`、`TaskReviewScP11ContractTest`、`TeamProfitCronContractTest`)→ `backend-blocking-junit` 必然失败(R165 为漏 3 类,**本轮扩大至 6 类**);**26 类已转绿仍被排除** → 硬门禁覆盖被人为缩小。G11 仍 ❌。 | 测试(R167 实测) | 2026-11-12 09:50 | 待处理(建议 CI 增双向差集断言) |
+| **R167 门禁** | 全量 3889 / 3820 | 测试 | **不通过(有条件)**。✅G1 98.23%(剔 skip 98.68%)、G3 609/624、G4 116/116、G5 编译(2121+367 源 0 错)、G6 28-28、**G8 6-6 全 401(B-142-1 闭环)**、G10 双节点(189 5/5 + 251 47/51)、G12 SRS 零变更;❌G2 51 红(后端 28 + 根级 16 + lg 4 + fe 3)、G7 4 红(429)、G9 锚点 18.5%、G11 CI 必红、G14 场景映射 56.1%;⚠️G13 存量 17 零漂移(第 15 次)。 | 测试(R167 全量实跑) | 2026-11-12 09:55 | 复评条件见报告 §5.1 |