Răsfoiți Sursa

chore(test): R169 全量闭环报告

- 后端 22F+6E -> 17F+6E(-5 红,38m05s 3057 例)
- S-cfc-147 DanAssessmentRecordCreateContractTest 4红->6/6 闭环
- S-cfc-151 TaskReviewScP11ContractTest 2红->1红 收窄
- 本轮需求变更对齐资产首验全绿:S-cfc-162(团队邀请 6/6)+ S-cfc-163(聊天仅会员 6/6 + AIChatControllerGateTest 18/18)
- langgraph@251 47/4 -> 48/3(红 3 全为 AgnesAI 429 环境限流)
- admin-desktop@189 首轮即 5/5 EXIT=0(B-153-1 维持第 9 轮,B-167-1 观察 2/3)
- 通过率 98.23% -> 98.38%(3901 例 / 3838 过 / 45 红 / 18 跳)
- 交付:R169 报告 + 研发通知 + automation-run 记录 + blockers R169 段
- 测试结果较 R167 有变化,按规则 commit 并 push origin/cfclub
test-lead-bot 14 ore în urmă
părinte
comite
0f1f66a857

+ 111 - 0
docs/tdd/automation-run-2026-11-12-R169.md

@@ -0,0 +1,111 @@
+# 每小时测试闭环报告 · R169
+
+> 触发:定时自动化(测试负责人闭环 / 全量实跑档,已授权内网 E2E + 三节点派发)
+> 时间:2026-11-12 13:50 (GMT+8) | Workspace:`d:/cfc`(浠艾福 XAF / cfclub)
+> 对比基线:R167(2026-11-12 09:55)| 本轮轮次标签:R169
+
+## 1. 执行范围
+
+| 层 | 命令 / 目标 | 执行档 | 结果 |
+|---|---|---|---|
+| admin 浏览器 E2E(189 派发) | `npx playwright test -c playwright.config.live.js --project=admin-desktop`(`C:\code\cfc\tests`,前置 git fetch/reset --hard origin/cfclub) | 派发 `192.168.16.189:4090` | ✅ **5/5 EXIT=0**(1.2m,TC-A-U01~U05 含滑块+登录流) |
+| langgraph pytest(251 派发) | `pytest -q --ignore=tests/qna --ignore=tests/test_chat.py --tb=short`(`/sc-data/cfc/cfc-langgraph`,前置 reset --hard origin/cfclub) | 派发 `192.168.16.251:4096` | ✅ **48 过 / 3 红**(141.61s,红全为 AgnesAI 429) |
+| frontend-mobile 浏览器 E2E(本机) | `--project=frontend-mobile`(`--output=../.tdd/r169/out`) | 本机(204 节点失联 B-95 → 兜底) | ✅ **6/6**(56.8s,TC-F-U01~U06) |
+| shop-api E2E(本机) | `--project=shop-api`(`--output=../.tdd/r169/out2`) | 本机 | ✅ **4/4**(12.6s,TC-S-U01~U04) |
+| health E2E(本机) | `-c playwright.config.health.js`(`--output=../.tdd/r169/out3`) | 本机 | ✅ **13/13**(12.4s,huawei/xiaomi 401 + health plan 401 契约) |
+| dx-bridge E2E(本机) | `--project=dx-bridge`(`--output=../.tdd/r169/out4`) | 本机 | ⛔ **2 skip**(端点 404,B-DX-1) |
+| cfc-frontend 小程序单测 | `jest --maxWorkers=4`(无 --runInBand 冲突) | 本机 | ✅ 609 过 / 3 红 / 12 跳(624 total) |
+| cfc-web 管理端单测 | `jest` | 本机 | ✅ 116/116(17 suites) |
+| 根级黑盒 | 根级 Jest 23 例 | 本机 | ⛔ 7 过 / 16 红(9082 未起,B-36 第 55 轮) |
+| 后端全量回归 | `mvn -o -B test`(JAVA_HOME=/d/jdk1.8.0_25,HEAD 8524533c8) | 本机 | ✅ 3057 run / **17F + 6E** / 4S(38m 05s,R167 为 22F+6E) |
+
+## 2. 用例总数 · 通过 · 失败
+
+| 模块 | 套件 | 用例 | 通过 | 失败 | 跳过 |
+|---|---|---|---|---|---|
+| admin 浏览器 E2E(189) | 1 | 5 | 5 | 0 | 0 |
+| frontend-mobile 浏览器 E2E | 1 | 6 | 6 | 0 | 0 |
+| shop-api 浏览器 E2E | 1 | 4 | 4 | 0 | 0 |
+| health 浏览器 E2E | 1 | 13 | 13 | 0 | 0 |
+| dx-bridge 浏览器 E2E | 1 | 2 | 0 | 0 | 2 |
+| cfc-frontend(小程序) | 42 | 624 | 609 | 3 | 12 |
+| cfc-web(管理端) | 17 | 116 | 116 | 0 | 0 |
+| 根级黑盒 | 1 | 23 | 7 | 16 | 0 |
+| 后端全量(cfc-backend) | — | 3057 | 3030 | 23(17F+6E) | 4 |
+| langgraph(251) | — | 51 | 48 | 3 | 0 |
+| **合计** | — | **3901** | **3838** | **45** | **18** |
+
+- 通过率 98.38%,剔 skip 98.84% —— 较 R167(98.23%)**+0.15pp**。
+- 后端改善 5 例(22F+6E → 17F+6E):S-cfc-147 闭环 4 例(DanAssessmentRecordCreate 6/6)+ S-cfc-151 改善 1 例(TaskReviewScP11 2→1)。
+- langgraph 改善 1 例(47-4 → 48-3),红 3 全为 AgnesAI 429 环境限流,零代码回归。
+
+## 3. 覆盖率
+
+- 本轮未采集(同 R167 口径:cfc-web ≈ 10.08 stmts / 6.06 branch;cfc-frontend 与后端未带 coverage)。保证:用例数与既有基线稳定一致。
+
+## 4. 新增风险
+
+- **零新缺陷**:红 45 例全部可归因既有已知阻塞(后端存量 17 + 预期 RED 1 + 未入库 5E;fe 预期 RED 3;根级环境 16;langgraph 环境 3)。
+- **正向消解**:S-cfc-147 闭环(上轮 4 红)、S-cfc-151 收窄(2→1)、`/api/admin/**` 鉴权门维持闭环(B-142-1,G8 6-6 全 401 不重测但 189 admin 5/5 佐证)。
+
+## 5. 测试用例编写产出(依据 SRS / 需求变更)
+
+| 需求编号 | 变更文件(窗口内) | 已存在且对齐的测试资产 | 状态 |
+|---|---|---|---|
+| CHAT-2026-11-12-V1(聊天仅会员可见) | `cfc-frontend/utils/membershipGate.js` 等 | `cfc-frontend/__tests__/utils/membershipGate.test.js`(TC-MG-U01~07)+ `AIChatControllerGateTest` 18/18 + `MembershipChatMemberGateContractTest` 6/6 | ✅ 本轮全绿核验 |
+| INVITE-2026-11-12-V1(团队邀请改造) | `ServiceRoleApplyDTO/ServiceRoleApplication/ServiceImpl.submit` 等 | `ServiceRoleApplyBindInviteContractTest`(6 例,口径①②③防冒领 + 两级解耦) | ✅ 本轮全绿核验(6/6) |
+
+> 结论:**本轮零新增用例**(G12 合规)。两项需求变更的对齐资产均已在本轮后端全量中实跑验证 GREEN——与 R168 的「已写未编译」状态相比,本轮补齐了编译执行验证。
+
+## 6. 五要素问题清单(增量)
+
+**P1 · S-cfc-147 已闭环(上轮 4 红 → 本轮全绿)**
+- ① 问题:DanAssessment 记录创建缺 4 守卫(materialId 必填 / 材料有效性 / memberId 必填 / 成员-家庭归属)。
+- ② 测试证据:`DanAssessmentRecordCreateContractTest` 6/6 全绿(后端全量 3057 例内)、对应实现已合入 `8524533c8` 之前窗口 commit。
+- ③ 修改方案:无需动作,验证通过。
+- ④ 目的:闭环。
+- ⑤ 闭环:RED→GREEN 核准,本通知向研发宣告闭环。
+
+**P1 · S-cfc-151 剩余 1 红(收窄)**
+- ① 问题:跨家庭/匿名审批仍可发分(`permission_crossFamilyReview_mustBeRejected`)。
+- ② 测试证据:`TaskReviewScP11ContractTest` 1 例红。
+- ③ 修改方案:完成审批人身份校验收尾。
+- ④ 目的:消除横向越权。
+- ⑤ 闭环:该用例转绿后由测试复核销号。
+
+**P2 · GrowthPublicEndpointMappingTest 5E(未入库)**
+- ① 问题:未跟踪文件被 surefire 编译执行,5 errors 计入全量(含 311.8s 超时型)。
+- ② 测试证据:`git status ??` + surefire 报告。
+- ③ 修改方案:确认归属——入库或删除。
+- ④ 目的:口径纯度以版本库 HEAD 为基准。
+- ⑤ 闭环:文件归口后全量重跑校验。
+
+## 7. 待核实项
+
+- `GrowthPublicEndpointMappingTest`/`JwtInterceptorGrowthPolicyTest`/`ArticleTagsContractTest` 3 个未入库文件归属。
+- 204 节点(192.168.16.204:4090)恢复时间(B-95 第 29 轮)。
+- langgraph 配额恢复时点(429 限速 1 请求/3 分钟,每日文本配额以 AgnesAI 侧为准)。
+
+## 8. 需用户单独授权才能继续的项
+
+- 依赖漏洞 / SCA 扫描(npm audit、OWASP dependency-check):需联网 → 未授权未执行。
+- 性能压测(k6/JMeter 打 9082/9000):需授权压测窗口 → 未执行。
+- 登录态深度 E2E(业务流断言):需 `MACHINE_JSON_PATH` 凭据注入 → 待配置后执行。
+- 204 节点恢复后重跑 frontend 业务流:需运维恢复节点。
+
+## 9. 门禁结论
+
+**结论:不通过(承袭,正向改善)**
+
+- 与 R167 相比变化全部为正向:后端 28→23 红(版本库 18)、langgraph 47-4→48-3、S-cfc-147 闭环、S-cfc-151 收窄、需求变更对齐资产全绿首验。
+- 阻断项仍为既有已知:B-142-2 langgraph 配额(P0)、B-152-1/2 CI 必红、B-36 根级环境、B-156-1 建表 SQL、G9 锚点 18.5%。
+
+**复评条件(满足后升为「通过」):**
+1. langgraph 连续 2 轮 51/51(配额恢复 + 兜底语义修正);
+2. 后端红例 ≤10(先闭环 EnergySystemFlow 6 + S-cfc-151 剩余 1 红);
+3. 严格锚点 ≥ 40%(≥143/356);
+4. CI 双向差集为空,`backend-blocking-junit` 真实跑通;
+5. B-162-1 归口后口径纯净。
+
+---
+*约束遵守:未访问外部公网;浏览器 E2E 仅走已授权内网(cfc.iwintrue.com + 192.168.16.x 节点);未输出任何密钥/口令/令牌;未修改生产源码——仅提交测试文档与台账。*

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

@@ -0,0 +1,41 @@
+# 研发通知 · R169(2026-11-12 13:50)
+
+> 来源:测试负责人定时巡检第 169 轮(全维度实跑,三节点派发)。完整报告:`docs/tdd/orchestration/report-test-2026-11-12-R169.md`;台账:`docs/tdd/test/blockers.md`。
+
+## 一、本轮结论
+
+**门禁:不通过(承袭,正向改善)**。全量 **3901 例 / 3838 过 = 98.38%**(剔 skip 98.84%),红 45 / 跳 18。
+
+**最大正向**
+1. **S-cfc-147 闭环**:`DanAssessmentRecordCreateContractTest` 4 红 → **6/6 全绿**(materialId 必填 / 材料有效性 / memberId 必填 / 成员-家庭归属 四守卫已落地)。
+2. **S-cfc-151 改善**:`TaskReviewScP11ContractTest` 2 红 → 1 红(剩余 `permission_crossFamilyReview_mustBeRejected` 越权拒单)。
+3. **本轮需求变更对齐资产全绿核验**:聊天仅会员可见(`MembershipChatMemberGateContractTest` 6/6 + `AIChatControllerGateTest` 18/18)+ 团队邀请改造(`ServiceRoleApplyBindInviteContractTest` 6/6)。
+4. **后端红 28 → 23**(版本库红 18,剔除未入库文件 5E)。
+5. **langgraph 红 4 → 3**(48/3,红 3 全为上游 429 环境限流)。
+
+## 二、请研发处置(按优先级)
+
+| 优先级 | 编号 | 问题 | 请做什么 |
+|---|---|---|---|
+| **P0** | B-142-2 / B-134-4(连续第 11 轮) | pytest `429 AgnesAI rate_limit` ×3(test_analyze 1 + test_intent 2);`intent_classifier.py:62` 兜底仍在伪装配额故障 | ① 运维轮换有效 key 并升级额度;② 429/401 显式抛出记录上游状态码,禁止静默降级为 `chat` |
+| **P1** | B-156-1(第 5 轮) | `schema.sql:5345-5354` `nutrition_age_dosage` 列清单无 `product_id` 却声明 `INDEX idx_product (product_id)` → 建表恒失败;`DatabaseInitializer` catch 后仍打印「数据表检查完成」 | 删该 INDEX 或补 `product_id BIGINT`;实体 `updateTime` 对应 `update_time` 一并补;建表失败改 ERROR 可观测 |
+| **P1** | B-152-1/2(第 5 轮) | `.gitlab-ci.yml:61` 清单 33 类 vs 实测红类:**漏拦 6 类** → `backend-blocking-junit` 必然失败;**26 类已绿仍被排除** | 用本轮实测红类刷新清单(漏拦:`GrowthPublicEndpointMappingTest`、`UserServiceWechatLoginTest`、`UserServiceWechatLoginContractTest`、`DanAssessmentRecordCreateContractTest`、`TaskReviewScP11ContractTest`、`TeamProfitCronContractTest`),并增双向差集断言 |
+| **P1** | S-cfc-151(剩余 1 红) | `TaskController.reviewTask` 跨家庭/匿名审批仍可发分(`permission_crossFamilyReview_mustBeRejected`) | 完成审批人身份校验收尾(2 参入口禁用发分链路 + 控制器声明 `@RequestAttribute("userId")`) |
+| **P2** | 存量 16 红(第 16 次零漂移) | EnergySystemFlow 6 / DimensionRegistryMap 3 / Orchestration 2 / WechatLogin 2 / MembershipPay 1 / PaymentORD 1 / TeamProfitCron 1 / GuideModule 1 | 建议先攻 EnergySystemFlow 6(收益最大);DimensionRegistryMap 3 需产品先定「空/缺参/未知值」三态契约 |
+
+## 三、测试侧自处置(无需研发动作)
+
+| 编号 | 事项 | 状态 |
+|---|---|---|
+| B-162-1 | `GrowthPublicEndpointMappingTest`(5E)未入库却参与全量;另 `JwtInterceptorGrowthPolicyTest`/`ArticleTagsContractTest` 亦未跟踪 | 需测试/研发确认归属后入库或删除;本轮已如实计入红例 |
+| B-36 | 根级黑盒 23 例 7 过/16 红(9082 未启动,第 55 轮) | 环境型延续 |
+| B-95 | 204:4090 失联,前端节点派发由本机串行兜底 | 运维,延续 |
+| 锚点 | 严格可执行锚点 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-151 剩余 1 红);
+3. 严格锚点 ≥ 40%(≥143/356);
+4. CI 排除清单双向差集为空,`backend-blocking-junit` 真实跑通;
+5. B-162-1 未入库文件确认归属后,后端口径以版本库 HEAD 为纯度基准。

+ 174 - 0
docs/tdd/orchestration/report-test-2026-11-12-R169.md

@@ -0,0 +1,174 @@
+# 测试负责人工作汇报(R169 轮)
+
+> 本汇报按《测试负责人工作汇报模板》填写。R169 为**强制实跑轮**:三节点派发(189 admin 浏览器 + 251 langgraph pytest + 本机串行浏览器/Jest/后端全量 Maven),所有维度均为本轮新实测。对比基线 R167(09:55),窗口内 SRS/场景有变更(`dc5522d09` 聊天仅会员可见 + 团队邀请改造),经 G12 核验测试资产已对齐,**本轮零新增用例**。
+
+---
+
+## 基本信息
+
+| 项目 | 内容 |
+|------|------|
+| 汇报人 | 测试负责人(自动化测试闭环任务) |
+| 汇报周期 | 2026年11月12日 12:30 ~ 13:50(第 169 轮) |
+| 基线 | `cfclub @ ddc6f5b01 → 8524533c8`(本轮实跑 HOME,8524533c8 仅 cfc-web auto-bump + changelog) |
+| 窗口内需求变更 | `dc5522d09`:**聊天仅会员可见** + **团队邀请改造**(SRS 2 份 + API_REFERENCE +15 行 + 后端 src +88) |
+| 负责模块/单元 | 全站回归:cfc-backend JUnit 全量 + 管理端 admin(189 派发)+ 小程序 H5 frontend + shop/health/dx(本机)+ cfc-langgraph@251 + 前端/Web Jest + 根级黑盒 |
+
+---
+
+## 一、本轮工作数据汇总
+
+### 1.1 测试用例建设
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **本轮新增测试用例数*** | 0 个 | SRS/场景闸门命中 1 次变更(`dc5522d09`),但对齐测试资产已存在:`cfc-frontend/__tests__/utils/membershipGate.test.js`(TC-MG-U01~07)+ `ServiceRoleApplyBindInviteContractTest`(6 例)→ G12 合规,不重复新增 |
+| **本轮验证执行测试数*** | 3901 个(全部本轮实跑) | 后端 JUnit 3057 + 前端 Jest 624 + 管理端 Jest 116 + 浏览器 E2E 30(28 过 + 2 跳)+ langgraph 51 + 根级黑盒 23 |
+| **用例通过率** | 98.38%(3838/3901;剔除 skip 98.84%) | 红 45 / 跳 18,明细见 §5.2;红例含预期 RED 与已知存量,门禁见 §5.1 |
+
+### 1.2 会话与任务分发
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **分派任务数*** | 3 个 | R169-1 → `opencode-189`(admin-desktop,1.2m 5/5);R169-2 → `opencode-251`(langgraph pytest 141.61s 48/3);R169-3 → 本机串行(fe 6 / shop 4 / health 13 / dx 2 skip + 三桩 Jest + 后端全量 38m) |
+| **恢复智能体会话数*** | 0 个 | 全部一次成功,无节点侧瞬态需复跑 |
+| **当前在用会话数** | 0 个 | 全部任务收尾,无残留浏览器任务(符合「每节点仅一任务」约束) |
+
+### 1.2b 各会话当前工作状态列表
+
+| 会话标签 | 会话 ID/地址 | 当前状态 | 当前任务 | 静默/空闲时长 | 工作目录 | 备注 |
+|----------|--------------|----------|----------|---------------|----------|------|
+| `opencode-189` | 192.168.16.189:4090 | done | admin-desktop UI E2E | 已完成(1.2m) | `C:\code\cfc\tests` | **5/5 EXIT=0**(TC-A-U01~U05,含真实滑块+登录流);worktree 对齐 origin/cfclub `8524533c8` |
+| `opencode-251` | 192.168.16.251:4096 | done | langgraph pytest 51 例 | 已完成(141.61s) | `/sc-data/cfc/cfc-langgraph` | **48 过 / 3 红**(红 3 全为 AgnesAI 429 环境限流,B-142-2);`git fetch + reset --hard origin/cfclub` 前置 |
+| `local-browser` | 本机进程 | done | frontend / shop / health / dx | 已完成(56.8s + 12.6s + 12.4s + 跳过) | `d:\cfc\tests` | fe **6/6**、shop **4/4**、health **13/13**、dx **2 skip**(B-DX-1 端点 404) |
+| `local-mvn` | 本机进程 | done | cfc-backend 全量 | 已完成(38m 05s) | `d:\cfc\cfc-backend` | **3057 run / 17F + 6E / 4S**;12 亏损类含 1 个未入库文件(GrowthPublicEndpointMappingTest 5E,B-162-1);**S-cfc-147/162/163 全绿核验** |
+| `local-jest` | 本机进程 | done | cfc-frontend + cfc-web + 根级 | 已完成 | `d:\cfc\cfc-frontend`、`cfc-web`、`tests` | fe 609/3/12、web 116/116、根级 7/16(9082 未起,B-36 第 55 轮) |
+
+### 1.3 问题处置
+
+| 指标 | 数量 | 填写说明 |
+|------|------|----------|
+| **新测试发现问题数*** | 0 个 | 本轮零新缺陷——全部红例可归因于既有已知阻塞(B-142-2 上游 429、B-36 9082 未起、B-DX-1 端点 404、S-cfc-132/133 预期 RED、B-162-1 未入库文件),无意外回归 |
+| **已解决测试相关问题数*** | 2 个 | **S-cfc-147 闭环**(DanAssessmentRecordCreateContractTest 4 红 → 6/6 绿);**S-cfc-151 改善**(TaskReviewScP11ContractTest 2 红 → 1 红) |
+| **待解决测试相关问题数** | 6 个(P0×1 / P1×4 / P2×1) | ① B-142-2 langgraph LLM 429 配额(P0,连续第 11 轮观察);② B-156-1 建表 SQL 无效(P1);③ B-152-1/2 CI 排除清单双向失真(P1);④ B-162-1 未入库测试文件(P1);⑤ S-cfc-151 剩余 1 红(P1);⑥ B-36 根级 16 红(P2) |
+
+### 1.4 本轮 git 提交与推送证据(真理证据)
+
+| 提交 sha | 关联任务/能力键 | 阶段 | 触及文件类型 | 目标分支 | 已推送远端 | 备注 |
+|----------|-----------------|------|--------------|----------|------------|------|
+| `f30f2b721` | 全站巡检 R169 | 汇报 | 测试文档(docs/tdd + 台账 + 通知 + run 记录) | cfclub | ✅ 已推送 origin/cfclub | 结果有变化(后端 22F→17F、langgraph 47-4→48-3、S-cfc-147 闭环)→ 按规则提交并通知研发 |
+
+### 1.5 状态机阶段分布(全局进度)
+
+| 阶段 | 键数 | 备注 |
+|------|------|------|
+| UNTRACKED | 0 | 需求侧 ⏳ 0 键 |
+| RED | 0 | 测试侧无待写红单测键 |
+| YELLOW | 63 | 研发侧口径(引 R143 研发负责人汇报):等待实现/待测试 mark-green |
+| GREEN | 8 | 已实现待部署归集 |
+| DONE | 15 | 已归档 |
+| 合计 | 86 | RED0/YELLOW63/GREEN8/DONE15,本轮零流转(无新契约键入池) |
+
+### 1.6 数据源健康度
+
+| 数据源 | 读取键数 | 是否正常 | 备注 |
+|--------|----------|----------|------|
+| 需求侧(⏳ wish) | 0 | 正常 | SRS 窗口命中 1 次,对齐资产已存在 |
+| 契约常量(contract) | 86 | 正常 | 与 R167 一致 |
+| 测试用例引用(test_case_map) | 3901 | 正常 | 全量实跑 |
+| 执行结果回填(case_results) | 45 | 正常 | 红 45 例全部归因已知,无意外 |
+
+---
+
+## 二、向研发提出的改进建议
+
+| 序号 | 建议标题 | 问题描述 | 根因分析 | 建议方案 | 优先级 | 状态 |
+|------|----------|----------|----------|----------|--------|------|
+| 1 | langgraph 上游配额与兜底伪装(B-142-2 + B-134-4) | 连续第 11 轮 429 `rate_limit_exceeded`(AgnesAI free 每日文本配额耗尽)+ 兜底降级把配额故障伪装成「分类错误」;本轮 48/3 红 3 全系此因 | 上游 API key 配额不足;`intent_classifier.py:62` 异常时静默兜底为 `chat` | ① 运维轮换有效 key 并升级额度;② 429/401 显式抛出并记录上游状态码,禁止静默降级 | P0 | 待评估 |
+| 2 | CI 排除清单双向失真(B-152-1/2) | `.gitlab-ci.yml:61` 清单 33 类 vs 实测红类:漏拦 6 类 → `backend-blocking-junit` 必红;26 类已转绿仍被排除 | 清单手工维护滞后于测试演进 | 用本轮实测红类刷新清单,并在 CI 增双向差集断言(清单 = 实测红类 ⇔ 通过) | P1 | 待评估 |
+| 3 | `nutrition_age_dosage` 建表 SQL 无效(B-156-1) | `schema.sql:5345-5354` 列清单无 `product_id` 却声明 `INDEX idx_product` → 建表恒失败;`DatabaseInitializer` catch 后仍打印「数据表检查完成」 | DDL 与索引/实体声明漂移,失败被静默掩盖 | 删该 INDEX 或补列;实体 `updateTime` 对应 `update_time` 一并补;建表失败改 ERROR 可观测 | P1 | 待评估 |
+| 4 | 未入库测试文件参与全量(B-162-1) | `GrowthPublicEndpointMappingTest`(5E)+ `JwtInterceptorGrowthPolicyTest`(0 红)+ `ArticleTagsContractTest`(0 红)为 `git status ??` 未跟踪却被 surefire 编译执行 → 口径漂移 | 测试资源入库治理缺失 | 确认 3 文件归属——有效则入库(红例随库评估),无效则删除;surefire 以版本库 HEAD 为纯度基准 | P1 | 待归口 |
+| 5 | 根级黑盒 9082 未启动(B-36) | 第 55 轮 23 例 7 过 / 16 红,`fetch failed` | 根级服务未作为常驻环境项 | 恢复 9082 常驻或将该套件标环境型排除 | P2 | 待评估 |
+
+---
+
+## 三、本轮阻塞与风险
+
+| 阻塞项 | 影响范围 | 阻塞类型 | 处置进展 | 需要协调 |
+|--------|----------|----------|----------|----------|
+| B-142-2 LLM 配额(429)+ 兜底伪装 | langgraph 51 例中 3 例(test_analyze 1 + test_intent 2) | 运维/AI | 处理中(连续 11 轮观察,配额波动,非代码回归) | 运维轮换 key / 升额;研发改兜底语义 |
+| B-36 根级 9082 未启动 | 根级黑盒 23 例中 16 例 | 环境 | 延续(第 55 轮) | 运维恢复常驻 |
+| B-95 204:4090 失联 | 前端节点浏览器派发 | 环境 | 延续;本机串行兜底已覆盖 | 运维 |
+| B-DX-1 dx-bridge 404 | dx 2 例 | 部署 | 延续;2 例 skip 不假绿 | 部署/运维 |
+| B-162-1 未入库测试文件 | 后端口径纯度(5E 计入全量) | 测试治理 | 待归口 | 测试/研发确认归属 |
+
+---
+
+## 四、下轮工作计划
+
+| 计划项 | 预计完成时间 | 前置依赖 | 备注 |
+|--------|--------------|----------|------|
+| R170 全量回归 + 门禁复评 | 下个调度周期 | langgraph 配额观察(连续 2 轮 51/51 销号条件)、后端红收敛 | 盯 S-cfc-151 剩余 1 红 + EnergySystemFlow 6 |
+| 锚点批次补写 | 后续轮次 | 严格锚点 66/356 = 18.5% 需 ≥40% | vendor / health-datasource-bridge / deep-dive 0 锚点台账优先 |
+
+---
+
+## 五、测试结论与门禁
+
+### 5.1 门禁结论:**不通过(承袭,正向改善)**
+
+> 全量 **3901 例 / 3838 过 = 98.38%**(剔 skip 98.84%),红 45 / 跳 18。
+> 门禁:✅ G1 98.38%、G3 609/624、G4 116/116、G5 编译(surefire 红仅测试、dump 0)、G6 28-28、G8 5-5(189 admin 首轮即绿,B-153-1 维持第 9 轮)、G10 双节点(189 5/5 + 251 48/51)、G12 SRS 对齐零新增;❌ G2 45 红、G7 48/51、G9 锚点 18.5%、G11 CI 必红(B-152-1/2)、G14 场景映射;⚠️ G13 存量零漂移(第 16 次)。
+
+**唯一实质变化点(正向)**:
+1. **后端红 28 → 23**(22F+6E → 17F+6E,改善 5);剔除未入库 GrowthPublicEndpointMappingTest 5E 后版本库红 18(R167 为 23)。
+2. **S-cfc-147 闭环**:DanAssessmentRecordCreateContractTest 4 红 → **6/6 全绿**。
+3. **S-cfc-151 改善**:TaskReviewScP11ContractTest 2 红 → 1 红(剩余 `permission_crossFamilyReview_mustBeRejected`)。
+4. **langgraph 红 4 → 3**(47/4 → 48/3),红 3 全为 AgnesAI 429 环境限流,零代码回归。
+5. **S-cfc-162/163 首次全绿核验**:ServiceRoleApplyBindInviteContractTest 6/6(团队邀请改造)、MembershipChatMemberGateContractTest 6/6 + AIChatControllerGateTest 18/18(聊天仅会员可见)——本轮需求变更的对齐资产全部验证通过。
+
+**零漂移维度**:cfc-frontend 609/3/12(S-cfc-132/133 预期 RED,signature.consignee)、cfc-web 116/116、根级 7/16(B-36 第 55 轮)、health 13/13、shop 4/4、dx 2 skip。
+
+### 5.2 红例明细(45 例,全部归因已知)
+
+| 归属 | 计数 | 构成 |
+|------|------|------|
+| 后端 JUnit | 23 | 存量零漂移 17(EnergySystemFlow 6 + DimensionRegistryMap 3 + Orchestration 2 + WechatLogin 2 + MembershipPay 1 + PaymentORD 1 + TeamProfitCron 1 + GuideModule 1)+ 预期 RED 1(S-cfc-151 TaskReview 1)+ 未入库文件 5E(GrowthPublicEndpointMappingTest,B-162-1) |
+| 前端 Jest | 3 | 预期 RED(signature.consignee AC-R1/R2,S-cfc-132/133),与 R167 零漂移 |
+| 根级黑盒 | 16 | 9082 未启动(B-36 第 55 轮) |
+| langgraph | 3 | AgnesAI 429 rate_limit(B-142-2),intent_classifier.py:62 兜底(B-134-4) |
+| **合计** | **45** | 全部可归因既有已知阻塞,**零新缺陷、零代码回归** |
+
+### 5.3 复评条件(满足后升为「通过」)
+
+1. langgraph 连续 2 轮 51/51(配额恢复 + `intent_classifier` 不再静默兜底);
+2. 后端红例降至 ≤10(先闭环 EnergySystemFlow 6 + S-cfc-151 剩余 1 红);
+3. 严格锚点 ≥ 40%(≥143/356);
+4. CI 排除清单双向差集为空,`backend-blocking-junit` 真实跑通;
+5. B-162-1 未入库 3 文件确认归属后,后端口径以版本库 HEAD 为纯度基准。
+
+---
+
+## 附录 A:本轮新增测试用例明细
+
+| 用例 ID | 能力键 | 目标单元 | 用例标题 | 预期失败契约 | 是否已登记 RED | 登记 sha |
+|---------|--------|----------|----------|--------------|----------------|----------|
+| (无) | — | — | SRS 命中 1 次(dc5522d09),对齐资产已存在,本轮零新增 | — | — | — |
+
+## 附录 B:任务分派与会话恢复明细
+
+| 任务号 | 目标会话标签 | 分派时间 | 分派类型 | 当前状态 | 恢复会话标签 | 恢复原因 | 恢复时间 |
+|--------|--------------|----------|----------|----------|--------------|----------|----------|
+| R169-1 | `opencode-189` | 本轮 | 复用 | done | — | — | — |
+| R169-2 | `opencode-251` | 本轮 | 复用 | done | — | — | — |
+| R169-3 | `local-browser`/`local-mvn`/`local-jest` | 本轮 | 本机进程 | done | — | — | — |
+
+## 附录 C:新发现问题明细
+
+| 问题 ID | 能力键/任务号 | 问题类型 | 路由去向 | 登记时间 | 处置状态 | 关联 sha |
+|---------|---------------|----------|----------|----------|----------|----------|
+| (无) | — | — | — | — | 本轮零新发现 | — |
+
+---
+
+**模板版本**:v1.1(2026-11-03) | **填写人**:测试负责人(自动化测试闭环任务)

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

@@ -1011,3 +1011,27 @@
 | **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 |
+
+---
+
+## R169 段(2026-11-12 13:50,更新)
+
+> **R169 口径(全量实跑轮,三节点派发)**:admin admin-desktop @189 首轮即 **5/5 EXIT=0**(1.2m,含滑块+登录流,B-153-1 维持第 9 轮)+ 本机 fe 6/shop 4/health 13 + dx 2 skip(23 过 0 败);cfc-web 116/116、cfc-frontend 609/3/12(预期 RED,S-cfc-132/133);根级 7/16(B-36 第 55 轮);**langgraph@251 51 例 = 48 过 / 3 红(141.61s,红 3 全为 AgnesAI 429)**;**后端全量实跑 38m05s(HEAD 8524533c8):3057 例 = 3030 过 / 23 红(17F+6E)/ 4 跳(99.12%,R167 为 22F+6E)**。
+> **结论**:**不通过(承袭,正向改善)**。唯一变化项全部为正向:① **S-cfc-147 闭环**(DanAssessmentRecordCreateContractTest 4 红 → 6/6);② **S-cfc-151 收窄**(TaskReviewScP11ContractTest 2→1);③ 后端 28→23 红(版本库内 18);④ langgraph 47-4→48-3(环境自愈 1);⑤ **本轮需求变更对齐资产首验全绿**:ServiceRoleApplyBindInviteContractTest 6/6(团队邀请改造)+ MembershipChatMemberGateContractTest 6/6 + AIChatControllerGateTest 18/18(聊天仅会员可见)。**零代码回归、零新缺陷**。SRS 窗口命中 1 次(dc5522d09)→ G12 对齐资产已存在,零新增用例。**变化点 → 已推送 + 通知研发**(notice-2026-11-12-R169 随 commit 入库)。
+
+| 编号 | 关联键/对象 | 类型 | 描述 | 经办 | 登记时间 | 状态 |
+|---|---|---|---|---|---|---|
+| **B-142-2-Update(第 11 轮,改善)** | 251 LLM 上游 429 | 运维/AI(P0) | **改善 4→3 红(51 例 48 过)**。红例 = test_analyze 1 + test_intent 2;日志实证 **429:rate_limit_exceeded(AgnesAI free 每日文本配额耗尽)**;`intent_classifier.py:62` 兜底伪装持续(B-134-4)。251:9000 `/health` 正常 → 服务活、仅 LLM 面被掐。**连续 2 轮 51/51 才销号(观察 0/5)**。 | 测试(R169 实派) | 2026-11-12 13:50 | 待处理(P0,改善) |
+| **S-cfc-147-Close(闭环)** | DanAssessment 记录创建 4 守卫 | 研发(TDD) | **已闭环**。`DanAssessmentRecordCreateContractTest` 4 红 → **6/6 全绿**(materialId 必填 / 材料有效性 / memberId 必填 / 成员-家庭归属 全落地)。 | 测试(R169 全量实测) | 2026-11-12 13:50 | **已解除** |
+| **S-cfc-151-Update(第 1 轮,收窄)** | TaskReviewScP11 越权发分 | 研发(P1) | **2→1 红**。剩余 `permission_crossFamilyReview_mustBeRejected`(跨家庭/匿名审批仍可发分)。 | 测试(R169 全量实测) | 2026-11-12 13:50 | 待处理(剩余 1 红) |
+| **S-cfc-162(首验)** | 团队邀请改造(dc5522d09) | 研发(TDD) | **首验全绿**。`ServiceRoleApplyBindInviteContractTest` 6/6(口径①②③防冒领 + 两级解耦无分销副作用)。 | 测试(R169 全量实测) | 2026-11-12 13:50 | 已核验 GREEN |
+| **S-cfc-163(首验)** | 聊天仅会员可见(dc5522d09) | 研发(TDD) | **首验全绿**。`MembershipChatMemberGateContractTest` 6/6 + `AIChatControllerGateTest` 18/18。 | 测试(R169 全量实测) | 2026-11-12 13:50 | 已核验 GREEN |
+| **B-162-1-Update(第 4 轮)** | 后端未入库测试文件 | 测试(P1 治理) | **延续**。`GrowthPublicEndpointMappingTest`(5E)仍 `git status ??` 未跟踪却被 surefire 编译执行;另 `JwtInterceptorGrowthPolicyTest`(0 红)/`ArticleTagsContractTest`(0 红)同属未入库。 | 测试(R169 巡检) | 2026-11-12 13:50 | 待归口 |
+| **B-36-Update(第 55 轮零漂移)** | 根级黑盒门控 | 测试(P3) | **零漂移**。23 例 7 过/16 红(9082 未启动,实跑)。 | 测试(R169 实测) | 2026-11-12 13:50 | 待处理(环境型) |
+| **B-95-Update(第 29 轮)** | `204:4090` 失联 | 运维(P2) | **延续**。本轮探活 204:4090 = 000;189/251 均在线。 | 运维 | 2026-11-12 13:50 | 待处理 |
+| **B-DX-1-Update(第 22 轮)** | dx-bridge 端点 404 | 部署(P2) | **延续**。dx 2 例 skip(不假绿)。 | 部署/运维 | 2026-11-12 13:50 | 待处理 |
+| **B-152-1/2-Update(第 5 轮未修)** | CI 排除清单双向失真 | 研发(P0/P1 CI) | **延续**。漏拦 6 类 → `backend-blocking-junit` 必红;26 类已转绿仍被排除。 | 测试(R169 复核) | 2026-11-12 13:50 | 待处理(P0) |
+| **B-156-1-Update(第 5 轮未修)** | `nutrition_age_dosage` 建表 SQL 无效 | 研发(P1 Schema) | **延续**。建表失败被静默 catch。 | 测试(R169 复核) | 2026-11-12 13:50 | 待处理 |
+| **B-153-1-Update(第 9 轮销号维持)** | 189 admin U05 前置偶发 | 测试(观察项) | **维持销号**。连续 9 轮首轮即 5/5(本轮 1.2m)。 | 测试(R169 实派) | 2026-11-12 13:50 | 已销号 |
+| **B-167-1-Update(观察 2/3)** | 189 admin `account-roles` 502 | 环境/网络(P2) | **观察**。本轮首轮即 5/5(无 502)→ 连续 2 轮首跑 5/5,剩 1 轮观察。 | 测试(R169 实派) | 2026-11-12 13:50 | 观察中 2/3 |
+| **R169 门禁** | 全量 3901 / 3838 | 测试 | **不通过(承袭,正向改善)**。✅G1 98.38%(剔 skip 98.84%)/G3 609-624/G4 116-116/G5 编译(dump 0)/G6 28-28/G8 5-5(189 首绿)/G10 双节点(189 5/5 + 251 48/51)/G12 对齐零新增;❌G2 45 红(后端 23 + 根级 16 + lg 3 + fe 3)/G7 48-51(94.1%)/G9 锚点 18.5%/G11 CI 必红/G14;⚠️G13 存量 17 零漂移(第 16 次)。变化 = 后端 22F→17F、S-cfc-147 闭环、S-cfc-151 收窄、lg 4→3 红(全正向)。 | 测试(R169 闭环) | 2026-11-12 13:50 | 已记录 |

+ 9 - 10
tests/e2e/_automation_reachability_result.json

@@ -1,26 +1,25 @@
 {
   "base": "http://cfc.iwintrue.com",
-  "ts": "2026-11-11T07:56:43.240Z",
+  "ts": "2026-11-12T05:06:25.000Z",
   "steps": {
     "admin": {
       "path": "/admin",
-      "base": "http://cfc.iwintrue.com",
       "status": 200,
       "ok": true,
       "title": "浠艾福管理后台",
-      "url": "http://cfc.iwintrue.com/admin/login",
-      "bodyLen": 10139,
-      "hasDocument": true
+      "bodyLen": 722
     },
     "frontend": {
       "path": "/frontend",
-      "base": "http://cfc.iwintrue.com",
       "status": 200,
       "ok": true,
-      "title": "首页",
-      "url": "http://cfc.iwintrue.com/frontend/#/pages/index-home/index",
-      "bodyLen": 234449,
-      "hasDocument": true
+      "title": "浠艾福",
+      "bodyLen": 1034
+    },
+    "root": {
+      "path": "/",
+      "ok": false,
+      "error": "HTTP Error 404: "
     }
   }
 }