Przeglądaj źródła

test(tdd): 第127轮测试闭环——后端全量2865例98.71%(红33,与R123零漂移);langgraph@251 43/43全绿(B-74未复现);189 admin 5/5第2轮(B-122销号维持);G10双节点连续2轮通过;B-69连续2轮闭环;新增B-126(langgraph进程不退出)、B-90第8轮(chat/analyze 90s零字节);门禁不通过(有条件):G2 49红/G9锚点9.9%/G11无CI

E2E Test Bot 2 dni temu
rodzic
commit
b6ed4af4a3

+ 257 - 0
docs/tdd/orchestration/report-test-2026-11-10-R127.md

@@ -0,0 +1,257 @@
+# 测试负责人工作汇报 · 第 127 轮(2026-11-10 16:30~17:35)
+
+> 执行档:**review(内网 cfc.iwintrue.com 已授权;离线 mvn -o;未联网装依赖)**
+> 基线 HEAD:`05f48f12d`(= origin/cfclub,跑测期间分支/HEAD 未漂移)
+> 分工:**189**=admin 浏览器套件|**本机**=frontend/shop/health 浏览器套件 + Jest + 后端全量|**251**=langgraph pytest|**204**=失联(B-95)
+> 结论:⛔ **不通过(有条件)** — 三项阻塞延续:G2 49 红 / G9 可执行锚点 9.9% / G11 无 CI 全量
+
+---
+
+## 1. 历史审查记录(仅作对照,不作为本轮结论依据)
+
+| 轮次 | 时间 | 后端全量 | langgraph | 结论 | 遗留缺口 |
+|---|---|---|---|---|---|
+| R123 | 11-10 13:30 | 2865 例 / 2828 过 / **98.71%** / 33 红 | 43/42/1 | 不通过(有条件) | G2 50 红、G9 17.1%、G11 |
+| R125 | 11-10 14:55 | 3501/3445=**98.40%**(引用上一轮后端) | **43/43 全绿** | 不通过(有条件) | G2 49、G9、G11 |
+| R126 | 11-10 15:55 | 未跑(仅 test-compile) | **39/43**(B-74 复发 4 例 LLM 401) | 有条件通过 | B-74、B-95、B-125 |
+| **R127(本轮)** | 11-10 17:30 | **2865 例 / 2828 过 / 98.71% / 33 红**(与 R123 逐字段一致) | **43/43 全绿** | **不通过(有条件)** | G2 49、G9 9.9%、G11 |
+
+- 本轮为该对象**第 127 轮**持续闭环审查,非首次。
+- 与 R123 对比:后端**逐类逐例零漂移**(2865/2828/33 红,红类集合完全一致)→ 研发窗口内无后端源码变更。
+- B-74(langgraph 4 例 LLM 401)**本轮未复现**,43/43 全绿;因 R126 曾复发,按纪律「连续 2 轮绿才销号」记为**观察第 1 轮**。
+
+---
+
+## 2. 项目画像速览
+
+- **业务**:浠艾福 XAF —— 家庭教育 SaaS(家庭成员/五维能量/成长规划师/健康报告/商城分佣/AI 管家)。
+- **技术栈**:`cfc-backend`(Spring Boot 2.7.18 + MyBatis-Plus + Java 8,9082)· `cfc-web`(Vue2 + ElementUI,Jest 116 例)· `cfc-frontend`(uni-app H5/小程序,Jest 426 例)· `cfc-langgraph`(FastAPI + LangGraph + Chroma,9000)· `dan/danshop`(独立商城 8888)。
+- **关键路径**:登录/家庭邀请 → 五维测评 → 成长任务 → 健康报告上传解析 → 商城下单分佣(CF)→ AI 对话。
+- **测试现状**:后端 339 测试类 / 2865 例(全量可跑);前端 Jest 27 套件;浏览器硬契约 28 例;langgraph 43 例。
+- **质量目标**:20 类全覆盖、G1≥95%、G2≤10 红、G6 28/28、G7 0 红、G9≥80%。
+- **风险点**:后端 33 红中 14 例产品类未闭环;SRS 锚点率长期 <30%(B-124 口径未统一);无 CI 全量门禁。
+
+---
+
+## 3. 20 类测试覆盖矩阵(三态:已实测 / 未发现 / 待核实)
+
+| # | 测试类型 | 状态 | 证据 |
+|---|---|---|---|
+| 1 | 单元测试 | ✅ 已实测 | 后端 339 类 2865 例(surefire);web 116;fe 426 |
+| 2 | 组件测试 | ✅ 已实测 | Vue shallowMount 组件用例(Families/AuditDetailDrawer 等 17+26 套件) |
+| 3 | 接口 API 测试 | ✅ 已实测 | 后端 364 Controller 的 MockMvc/直调用例;线上 4 端点鉴权探针 401 |
+| 4 | 集成测试 | ✅ 已实测 | `integration.*` 5 类(EnergySystem/GrowthRecordSync/GuideModule/DimensionRegistryMap)实跑 |
+| 5 | 系统/端到端 E2E | ✅ 已实测 | 浏览器 28/28(admin 5 / frontend 6 / shop-api 4 / health 13) |
+| 6 | 冒烟测试 | ✅ 已实测 | 浏览器 28 例 + Jest 全绿即冒烟面 |
+| 7 | 回归测试 | ✅ 已实测 | 与 R123 后端逐字段零漂移;web/fe 零漂移;langgraph 由 39→43 |
+| 8 | 探索性测试 | ⚠️ 待核实 | 本轮只做定向探针(langgraph live chat/analyze),无 chartered 探索会话 |
+| 9 | 验收 UAT / BDD | ⚠️ 待核实 | 无 BDD(cucumber/gherkin)执行证据 |
+| 10 | 性能测试 | ⛔ 未授权未执行 | 压测属 execute 档(需联网授权),本轮未做 |
+| 11 | 可靠性测试 | ⚠️ 待核实 | 无混沌/恢复演练;仅观察 502 窗口与节点失联 |
+| 12 | 安全测试(SAST/DAST/SCA/渗透) | ⛔ 未授权未执行 | 依赖漏洞扫描/DAST 需联网;仅剩静态项(见 §7 #10) |
+| 13 | 兼容性测试 | ⚠️ 待核实 | 仅 Chromium 单浏览器;无 iOS/Android/多浏览器矩阵 |
+| 14 | 可用性测试 | ⚠️ 待核实 | 无真实用户可用性证据 |
+| 15 | 无障碍测试 | ⚠️ 待核实 | 无 axe/WCAG 扫描 |
+| 16 | 覆盖率度量 | ⚠️ 已实测(低) | cfc-web 语句 10.09% / 分支 6.12% / 函数 7.50% / 行 9.97%;后端 JaCoCo 未接入 |
+| 17 | 变异测试 | ⛔ 未发现 | 无 PIT/mutation 资产 |
+| 18 | 契约测试 | ✅ 已实测 | 鉴权契约 4/4 401(含 `/api/mind/**`);D/X 桥接契约 16 例在册全绿 |
+| 19 | QA 流程 | ⚠️ 待核实 | 127 轮闭环可追溯;门禁未脚本化(G11) |
+| 20 | 全项目代码审查 | ⚠️ 待核实 | 本轮仅做规范扫描(`@GetMapping` 8 处仍违 AGENTS.md),未跑全量静态审查 |
+
+---
+
+## 4. 实测结果明细(本轮真实信号,全部本机/节点实跑,无引用)
+
+| # | 维度 | 命令/方式 | 节点 | 结果 |
+|---|---|---|---|---|
+| 1 | 后端全量 | `mvn -o -B clean test`(JDK1.8.0_25 + Maven 3.6.1,**42m36s**) | 本机 | **339 类 / 2865 例 / 2828 过 / 30F+3E+4S = 98.71%**;14 红类 / 33 红例;**339/339 XML 无沉默**;testCompile **345 源 0 错**;`target/classes` **2325** class |
+| 2 | cfc-web Jest | `CI=true npx jest --ci --runInBand` | 本机 | ✅ **17 套件 / 116 例全绿**(18.1s) |
+| 3 | cfc-frontend Jest | 同上 | 本机 | ✅ **26 套件 / 426 例 = 423 过 / 3 skip / 0 红**(18.1s) |
+| 4 | 根级黑盒 Jest | `npx jest -c tests/jest.config.js` | 本机 | ⚠️ **23 例 = 7 过 / 16 红**(`ECONNREFUSED` 9082 未启,B-36 第 30 轮零漂移) |
+| 5 | langgraph pytest | 251 `POST /api/shell` 实派 `.venv/bin/python -m pytest tests --ignore=tests/qna --ignore=tests/test_chat.py` | **251** | ✅ **43 passed / 0 红(1020.56s)**;`PYTEST_EXIT=124`=测试跑完后解释器不退(`timeout` 收尾杀进程),非用例失败 |
+| 6 | 管理端 UI E2E | `playwright -c live --project=admin-desktop` | **189** | ✅ **5/5**(1.3m,TC-A-U01~U05 含滑块+真实登录入主框架) |
+| 7 | 小程序 H5 E2E | `--project=frontend-mobile` | 本机 | ✅ **6/6**(1.1m,TC-F-U01~U06) |
+| 8 | 商城排序契约 | `--project=shop-api` | 本机 | ✅ **4/4**(11.6s,TC-S-U01~U04) |
+| 9 | 健康鉴权契约 | `-c playwright.config.health.js` | 本机 | ✅ **13/13**(7.6s,TC-HP-U01~U03 均 401) |
+| 10 | 线上鉴权探针 | `curl -X POST` 4 端点匿名 | 本机 | ✅ **4/4 = 401**(`/api/mind/fortune`、`/api/energy/overview`、`/api/health/plan/list`、`/api/huawei-health/status`)→ **B-69 连续 2 轮闭环** |
+| 11 | langgraph live | `POST /api/v1/chat`、`/api/v1/analyze`(正确 schema) | 本机→251 | ❌ **均 90s 零字节(HTTP 000)** → **B-90 延续**(`/health` 6ms 200、schema 校验层 422 均正常,仅 LLM 链路挂死) |
+| 12 | 节点探活 | curl | 4 节点 | 251:4096=200 / 251:9000=`{"status":"ok"}` / 189:4090=200 / **204:4090=000(B-95)** / 本机 9082 未启 |
+
+**全量计数**(去重口径:后端 2865 + web 116 + fe 426 + 根级 23 + langgraph 43 + 浏览器 28)
+- 合计 **3501 例**,通过 **3445** = **98.40%**,红 **49**(后端 33 + 根级 16),skip **7**(后端 4 + fe 3)。
+
+---
+
+## 5. 覆盖缺口清单
+
+| 缺口 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
+|---|---|---|---|---|---|
+| G-127-1 SRS 可执行锚点 | 827 TC 行,末列锚点非空 234(28.3%),指向可执行用例仅 **82(9.9%)** | 需求→用例不可双向追溯,改动无法判断回归面 | 为每个 spec 章节强制登记 ≥1 个可执行 anchor(用例名/测试类#方法) | P1 | `test-cases/*.md` 末列补锚点后重算 ≥80% 才过 G9 |
+| G-127-2 场景覆盖 | SC 244,被 TC 引用 146(**59.8%**) | 98 个场景无用例,验收无据 | 按 P0 场景优先补三类流(正常/异常/边界) | P1 | sc-key-map 与 TC 台账双向对账 |
+| G-127-3 后端产品红 14 例 | EnergySystem 6×500、Orchestration 2、UserWechatLogin 2、MembershipPay 1、PaymentORD 1、TeamProfitCron 1、platform_fee 1 | 五维能量与微信登录为高频入口,可能真实不可用 | 先线上复现(可用账号)再定产品/装置 | **P0** | 研发修复后定向复跑转绿 |
+| G-127-4 装置红 16 例 | CfCommission 8、ArticleAutoTag 4、GrowthRecordSync 3、TaskPlan 1 | 掩盖真实分佣/打标回归 | 按 §7 #1~#4 修装置 | P1 | 定向复跑 16/16 绿 |
+| G-127-5 langgraph 运行时不收敛 | 测试 43/43 通过但进程不退(EXIT=124);live chat/analyze 90s 零字节 | CI 会挂死;生产 AI 对话不可用 | ① 加 `--timeout`/`os._exit` 收尾 ② 给 LLM 调用加显式超时与降级 | **P0** | 连续 2 轮 pytest 正常退出 + live 200 有 body |
+| G-127-6 无 CI 后端全量 | 后端 2865 例只在本地人工跑 | 回归不可持续,红例长期沉淀 | GitLab CI 增 blocking 全量 job(可离线缓存 m2) | P1 | CI 绿/红可查 + 阻断合并 |
+| G-127-7 覆盖率空白 | 后端无 JaCoCo;web 语句 10.09% | 无法度量单测有效性 | 后端接 jacoco-maven-plugin,报告入库 | P2 | 覆盖率报告产出并可复算 |
+| G-127-8 204 节点失联 | 4090 等端口全 000 | 浏览器任务无冗余节点 | 运维恢复并登记节点能力 | P2 | 探活 200 + 实派 1 例绿 |
+
+---
+
+## 6. 域结论表
+
+| 审查维度 | 负责专家 | 结论 | 关键证据 |
+|---|---|---|---|
+| 单元·组件级 | 苏雅 | **不通过(局部)** | 后端 33 红中 16 例装置型(Mockito 误用/夹具无值);web 覆盖率 10.09% 偏低 |
+| 集成·接口级 | 柯砚 | **不通过(局部)** | `integration.*` 5 类中 4 类红(EnergySystem 6×500、GrowthRecord 3、GuideModule 1 截断、DimensionMap 3) |
+| 系统·验收级 | 白樾 | **有条件通过** | 浏览器 28/28;但无 UAT/BDD,验收仅靠 E2E 硬契约 |
+| 测试保障级 | 闻朔 | **有条件通过** | 26 轮零漂移回归有效;冒烟面 = 28 例;探索性无 chartered 记录 |
+| 性能·可靠性 | 骆骋 | **未实测(未授权)** | 压测需 execute 档授权;仅有 langgraph 90s 零字节的可靠性观察 |
+| 安全 | 关屿 | **不通过(局部)** | 鉴权 4/4 401 达标;但 `@GetMapping` 8 处违 AGENTS.md、`application.yml` 明文凭据 B-31 未改造 |
+| 兼容·体验 | 阮清 | **待核实** | 仅 Chromium;无多端矩阵、无 axe 无障碍扫描 |
+| 流程·度量·代码 | 何序 | **不通过(局部)** | G9 口径三套并存(B-124);无 CI 全量(G11);测例台账 827 行但可执行锚点 9.9% |
+
+---
+
+## 7. 五要素问题清单
+
+### #1【P1·装置】CfCommissionServiceSettleTest 8 例「Wanted but not invoked」
+- **① 问题描述**:`settle_*` 8 例全部失败,报 `cfBalanceService.earnByRule(...)` / `ppointConsumptionLogMapper.insert(...)` 未被调用。
+- **② 测试 bug 点**:`cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceSettleTest.java`(`settle_F03a发放_自动创建感恩记录`、`settle_两级销售奖_F03a按团队档位_F03b按自身档位`、`settle_同家庭引荐人跳过_顺延到下一级拿F03a`、`settle_商品订单实付与分润基数分离`、`settle_推荐人分润只走earnByRule_不再写旧分佣流水`、`settle_最多两级_第三级引荐人不发放`、`settle_档位比例超规则上限_按上限封顶`、`settle_落P点消费日志_基数与订单对应`)。
+- **③ 最优修改方案**:先补 settle 路径的前置守卫桩(订单状态、受益人解析、家庭关系),mock 返回真实形态对象;断言由精确 `any()` 改为 `ArgumentCaptor` 捕获后校验实付/基数/档位,避免「桩不匹配 → 提前 return → 断言不触发」。
+- **④ 修改目的**:消除 8 例装置假红,恢复分佣链路的真实守护能力(CF 结算是资金链路)。
+- **⑤ 闭环**:`mvn -Dtest=CfCommissionServiceSettleTest test`(注意 surefire 2.22.2 只认**逗号**分隔)复跑 **12/12 绿**。
+
+### #2【P1·装置】ArticleAutoTagServiceTest 4 例线程池调用次数断言
+- **①**:3 例 `Wanted 1 time` 未发生、1 例 `Never wanted here` 反被调用。
+- **②**:`cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleAutoTagServiceTest.java`(`auditArticle_…`、`publishByUser_…`、`toggleStatus_发布且标签为空_调度自动打标`、`toggleStatus_标签非空_不调度自动打标`)。
+- **③**:改用 `verify(executor, timeout(1000)).execute(any())` 容忍异步提交;标签非空用例先显式 `clearInvocations(executor)` 再断言 never。
+- **④**:区分「异步调度」与「同步执行」,避免把时序差异判成功能缺失。
+- **⑤**:定向复跑 4/4 绿,且连续 2 轮稳定(防 flaky)。
+
+### #3【P1·装置】GrowthRecordSyncFlowTest 3 例(2 处 NPE + 1 处布尔断言)
+- **①**:`parentCreatesRecordWithOrder_Success:164`、`parentUploadsHealthReport_Success:204` 抛 `NullPointerException`;`parentCreatesRecordWithoutChild_Fails:130` 期望 true 得 false。
+- **②**:`cfc-backend/src/test/java/com/etotem/cfc/integration/GrowthRecordSyncFlowTest.java:130/164/204`。
+- **③**:164/204 补 mock 返回值(订单/报告对象在「孩子→家庭成员」重构后改走 `getXxxByFamilyMember`,桩仍是旧方法名);130 改为断言业务响应码/message,而非守卫层布尔。
+- **④**:消除重构遗留的夹具滞后,恢复成长记录同步的回归保护。
+- **⑤**:定向复跑 10/10 绿。
+
+### #4【P2·装置】TaskPlanServiceTest 1 例
+- **①**:`applyAndActivate_无active实例时新建并置active` 期望 100 得 null(返回 id 为空)。
+- **②**:`cfc-backend/src/test/java/com/etotem/cfc/unit/TaskPlanServiceTest.java`。
+- **③**:补 `insert` 回填主键的 mock(`doAnswer` 设置 id),或改用 `ArgumentCaptor` 校验保存对象。
+- **④**:使激活路径可断言,避免「新建成功但 id 空」类缺陷逃逸。
+- **⑤**:定向复跑 4/4 绿。
+
+### #5【P0·产品】EnergySystemFlowTest 6 例全 500(五维能量核心链路)
+- **①**:`parentGetsEnergyOverview` / `parentQueriesEnergyLogs` / `taskCompletionGrantsEnergy` / `childExchangesWishWithEnergy` 均 `expected 200 but was 500`;`childExchangesWithInsufficientEnergy_Fails` 期望 true 得 false;`userWithoutFamily_Fails` 期望 500 得 5001。
+- **②**:`cfc-backend/src/test/java/com/etotem/cfc/integration/EnergySystemFlowTest.java:116/150/182/212/246/282`。
+- **③**:先取 500 的 `Caused by` 最内层(历史同类多为空指针/字段缺失),对照 `/api/energy/*` 实现在「孩子→家庭成员」重构后的成员解析;5001 为自定义错误码,需与断言口径对齐(若 5001 为设计值,则改断言并写入契约)。
+- **④**:五维能量是产品主线,6 例常红意味着能量查询/兑换可能对真实用户不可用。
+- **⑤**:修复后定向复跑 7 例全绿 + 线上 `/api/energy/overview` 带 token 实返 200。
+
+### #6【P1·产品】Orchestration 2 例
+- **①**:`testOnTaskFailed_FoundNode_ThenMarkFailedAndEvaluateFlow` 期望 `"manual_fail"` 得 null;`testEvaluateFlow_AndNode_AllCompleted_Triggered` 实际 `"failed"` 不在 `[in_progress,pending]`。
+- **②**:`cfc-backend/src/test/java/com/etotem/cfc/orchestration/OrchestrationEngineTest.java:176`、`OrchestrationIntegrationTest.java:105`。
+- **③**:核对失败原因枚举落库时机(是否仅在事务提交后回写);若实现改为异步回写,则用例改为轮询等待终态。
+- **④**:编排引擎的失败态判定直接影响任务流转与结算。
+- **⑤**:定向复跑 2 类全绿,并补 1 例「失败→重试→终态」回归。
+
+### #7【P1·产品】UserServiceWechatLogin(Contract) 2 例 + MembershipPaySwitch 1 例 + PaymentServiceORD 1 例
+- **①**:微信首次登录返回 `null` 而非 `jwt-token-1`;`createOrderWithPayType_virtualEnabled_configMissing_returnsNull` 返回了订单对象;ORD 未知前缀未路由到 `handlePaymentCallback`(得 FAIL)。
+- **②**:`service/UserServiceWechatLoginTest.java`、`UserServiceWechatLoginContractTest.java:110`、`MembershipPaySwitchTest.java:209`、`PaymentServiceORDRoutingTest.java:83`。
+- **③**:微信登录按「新 openid 建档 + 家庭创建」契约核对返回体;虚拟支付在配置缺失时应短路返回 null(当前未短路);ORD 路由补前缀白名单。
+- **④**:登录与支付是营收入口,任何静默降级都是资金/账号风险。
+- **⑤**:3 类定向复跑全绿 + 线上登录取 token 冒烟 1 次。
+
+### #8【P1·产品】TeamProfitCronContractTest 冷静期退款未全撤销
+- **①**:`refundWithinCooling_cancelAllRecordsFundsNotPaid` 断言 `cancelled=0` 应为 true。
+- **②**:`cfc-backend/src/test/java/com/etotem/cfc/unit/TeamProfitCronContractTest.java`(§8.2 契约)。
+- **③**:退款回调需将 `team_share_record`/`team_award_record` 置 cancelled 且不发放;核对定时任务与退款回调的竞态(谁先谁后)。
+- **④**:冷静期退款错发是资金损失。
+- **⑤**:定向复跑 22 例全绿 + 1 例竞态顺序用例。
+
+### #9【P0·契约待裁决】DimensionRegistryMapContractTest 3 例(P-9,第 9 轮)
+- **①**:`map_unknownLegacy_returnsNullData` 期望 `data=null` 实得 `"unknown_legacy_xyz"`;`map_missingLegacy_returnsBadRequest` 期望 400 得 200;`map_emptyLegacy` 期望 null 得 `""`。
+- **②**:`cfc-backend/src/test/java/com/etotem/cfc/integration/controller/DimensionRegistryMapContractTest.java:76/85/92`。
+- **③**:需主理人裁决「未知 legacyCode 的语义」——透传 or 归 null;裁决后**单向**修改(改实现或改用例),不得两边各改一半。
+- **④**:同一契约连续 9 轮红,已成为 G2 的固定分母,且掩盖真实回归。
+- **⑤**:裁决落地后定向复跑 7/7 绿,并在 P-9 台账销号。
+
+### #10【P1·安全和流程】`@GetMapping` 8 处仍违 AGENTS.md + 明文凭据未改造
+- **①**:`cfc-backend/src/main/java` 仍有 8 处 `@GetMapping`(规范要求统一 `@PostMapping`);`application.yml` 7 处明文凭据(B-31)未按 O-10 改造。
+- **②**:`grep -rn "@GetMapping" cfc-backend/src/main/java`(8 命中);`cfc-backend/src/main/resources/application.yml`。
+- **③**:8 处改为 `@PostMapping`(同步前端调用);凭据改 `${ENV_VAR}` 占位 + 部署注入 + gitleaks 预检。
+- **④**:GET 暴露参数于 URL/日志;明文凭据可被仓库读权限者直取。
+- **⑤**:`grep -c @GetMapping` = 0;gitleaks 扫描 0 命中。
+
+---
+
+## 8. 度量快照
+
+| 指标 | 数值 | 环比 |
+|---|---|---|
+| 测试类(后端) | 339 | 与 R123 一致 |
+| 后端用例 | 2865 | 一致 |
+| 用例台账 TC 行 / 唯一编号 | 827 / 284 | 一致(SRS 零变更) |
+| 可执行锚点 | 82(**9.9%**)/ 末列非空 234(28.3%) | 口径见 B-124 |
+| 用户场景 SC | 244,TC 引用 146(59.8%) | 一致 |
+| Controller | 364 | — |
+| `@GetMapping` 违规 | 8 | 一致(未整改) |
+| 测试文件 / testCompile | 345 源,0 错 | — |
+
+---
+
+## 9. 门禁结论
+
+| 门禁 | 判据 | 实测 | 结论 |
+|---|---|---|---|
+| G1 全量通过率 | ≥95% | **98.40%**(3445/3501) | ✅ |
+| G2 红例数 | ≤10 | **49**(后端 33 + 根级 16) | ❌ |
+| G3 前端 Jest | 0 红 | 423 过 / 0 红 / 3 skip | ✅ |
+| G4 管理端 Jest | 0 红 | 116/116 | ✅ |
+| G5 编译与完整性 | testCompile 0 错 + XML 无沉默 | 345 源 0 错;**339/339 XML** | ✅ |
+| G6 浏览器 | 28/28 | **28/28**(4 套件) | ✅ |
+| G7 langgraph | 0 红 | **0 红(43/43,B-74 观察第 1 轮)** | ✅ |
+| G8 鉴权契约 | 全 401 | 线上 4/4 + 契约 13/13(含 `/api/mind/**`) | ✅ |
+| G9 SRS 锚点 | ≥80% | **9.9%(严格)/ 28.3%(宽松)** | ❌ |
+| G10 双节点派发 | 251 + 189 均实派 | **251 ✅(43 例)/ 189 ✅(5/5)** | ✅ |
+| G11 CI 含后端全量 | 存在 blocking 全量 | 无 | ❌ |
+| G12 用例入库 | 本轮有新增/更新 | SRS 窗口零变更 → 不新增(合规) | ✅ |
+
+**总裁决:不通过(有条件)**
+
+- 阻塞放行三项:**G2 49 红**、**G9 可执行锚点 9.9%**、**G11 无 CI 全量**。
+- 环比改善:**G7 由 39/43 回到 43/43**;**G10 双节点连续 2 轮通过(189 admin 5/5 第 2 轮,B-122 销号成立)**;**B-69 连续 2 轮闭环**。
+- 环比持平:后端 2865/2828/98.71% 与 R123 逐字段一致(零漂移);49 红构成不变。
+- 新增/延续风险:**B-90** langgraph live `chat`/`analyze` 90s 零字节(生产 AI 对话不可用),与「测试 43/43 全绿」并存 → 说明单测覆盖不到 LLM 真实链路,需补 live 契约。
+- **放行建议**:内网灰度可放(核心浏览/登录/商城/健康鉴权均绿);**不支撑对外正式发布**,除非 §7 #5/#7/#8 的产品红有结论或已修复。
+
+---
+
+## 10. 本轮执行合规声明
+
+- 未联网安装依赖、未启停线上服务、未修改生产源码;仅新增测试侧脚本与本报告/台账。
+- 未触碰他人 WIP(跑前跑后 `git status --porcelain` 已跟踪改动 **0**)。
+- 浏览器任务严格「每节点单任务」:189 跑 admin,本机串行跑 frontend→shop→health(`workers:1`)。
+- 8 类套件全部实跑,无引用历史数字。
+
+---
+
+## 附录 A · 本轮命令(可复现)
+
+```bash
+# 后端
+cd cfc-backend && JAVA_HOME=D:/jdk1.8.0_25 mvn -o -B clean test     # 42m36s
+# Jest
+cd cfc-web   && CI=true npx jest --ci --runInBand --coverage         # 116
+cd cfc-frontend && CI=true npx jest --ci --runInBand                 # 423+3skip
+cd tests && npx jest -c jest.config.js --ci                          # 7/16
+# 浏览器(本机串行,workers:1)
+cd tests && npx playwright test -c playwright.config.live.js --project=frontend-mobile
+cd tests && npx playwright test -c playwright.config.live.js --project=shop-api
+cd tests && npx playwright test -c playwright.config.health.js
+# 189(PowerShell 节点,cmd /c 分离进程)
+node _r127_189_admin.cjs kick / read
+# 251(同 shell 轮询 + tee 落盘)
+MSYS_NO_PATHCONV=1 PYTEST_TIMEOUT=1650 node _r127_251_v3.cjs
+```

+ 133 - 0
docs/tdd/orchestration/report-test-2026-11-10T1455.md

@@ -0,0 +1,133 @@
+# 测试闭环·每小时报告 — 2026-11-10 14:55 轮(review 档 · 内网 cfc.iwintrue.com 已授权)
+
+- **执行对象**:workspace `d:/cfc`(浠艾福 XAF 项目)· 主理人 陆谨(软件测试专家团)
+- **当前 HEAD**:`d78f2aa21`(R125,测试负责人第125轮闭环汇报:3501/3445=98.40% · langgraph@251 43/43 首次全绿 · B-123 销号)
+- **执行档**:review(已授权内网 /admin + /frontend;不访问外部公网;仅写入测试目录,不改生产源码、不提交、不推送)
+- **结论**:⛔ **有条件通过**(连续稳态轮;可执行套件零漂移全绿,但全量后端/覆盖率/安全/性能/登录态 E2E 等维度未实测,不得记为通过)
+
+---
+
+## 1. 历史审查记录(仅作对照,不作为本次结论依据)
+- 本对象为**持续每小时循环审查**,非首次。参考基线:
+  - **R120(11-28 轮,HEAD 8da3f0aa0)**:Jest 双绿(web 116/116、fe 426=423过/3跳/0红)、后端 `mvn -o test-compile` GREEN、内网 E2E 探针 2/2;结论「不通过(有条件)」。
+  - **R125(当前 HEAD d78f2aa21)**:后端全量 3501/3445=98.40%(56 项未通过,多为 TDD-RED 预期红与历史债)、langgraph@251 43/43 首次全绿、B-123 销号、B-69 已落码(merge fix/b69 `84239ce22` 强制 /api/mind/** 登录)。R125 报告结论段含「通过」字样(子项口径),但本机仍有多维度未实测,按从严原则维持「有条件通过」。
+- 本次为 R125 之后的下一轮(候选 R126),HEAD 未变(17 个新 commit 均为 `docs(tdd)`/`chore` 报告与版本号,无源码/需求变更)。
+
+## 2. 项目画像速览(只读)
+- 模块:`cfc-backend`(Spring Boot 2.7.18 + MyBatis-Plus + Java 8,端口 9082)· `cfc-web`(Vue2+ElementUI 管理端 8082,Jest 单元/组件)· `cfc-frontend`(uni-app 小程序 Vue2,Jest)· `cfc-langgraph`(Python FastAPI+LangGraph 9000)。
+- 关键约定(AGENTS.md):统一 `@PostMapping`;JWT 拦截 `/api/**`;AI 能力统一走 LangGraph;生产源码只读不改动。
+- 内网目标:`cfc.iwintrue.com` 经 hosts 解析至 `192.168.16.251`(非公网,已授权),仅 `/admin`、`/frontend` 在授权面内。
+
+## 3. 20 类测试覆盖状态矩阵(三态:已实测 / 未发现-降级 / 待核实)
+| # | 测试类型 | 状态 | 证据 |
+|---|----------|------|------|
+| 1 | 单元测试 | 已实测 | cfc-web 116例、cfc-frontend 426例;后端 `test-compile` GREEN(引用 R125 全量 3501例) |
+| 2 | 组件测试 | 已实测 | Vue 组件 Jest(AuditDetailDrawer、FamilyRelationGraph 等 shallowMount) |
+| 3 | 接口 API 测试 | 已实测(部分) | E2E 鉴权契约 401 拦截;Jest 用 mock adapter,**不断言真实服务端行为** |
+| 4 | 集成测试 | 未发现-降级 | 后端集成测试需 MySQL,本机 3306 不可达 → 未实测 |
+| 5 | 系统/端到端 E2E | 已实测+降级 | 无登录探针 /admin+/frontend 2/2 绿;登录态业务流无凭据 → 降级 |
+| 6 | 冒烟测试 | 已实测 | E2E 可达探针 + Jest 双绿 |
+| 7 | 回归测试 | 已实测 | 与 R120 逐项比对,红例差集空,零漂移 |
+| 8 | 探索性测试 | 待核实 | 无专门探索性脚本 |
+| 9 | 验收 UAT/BDD | 待核实 | 无 BDD 规格执行证据 |
+| 10 | 性能测试 | 未授权未执行 | 压测属 execute 档公网,未授权 |
+| 11 | 可靠性测试 | 待核实 | 无混沌/恢复演练 |
+| 12 | 安全(SAST/DAST/依赖漏洞/渗透) | 未授权未执行 | 公网依赖扫描/DAST 未授权 |
+| 13 | 兼容性测试 | 待核实 | 无多浏览器/多端矩阵 |
+| 14 | 可用性测试 | 待核实 | — |
+| 15 | 无障碍测试 | 待核实 | — |
+| 16 | 覆盖率度量 | 已实测(低) | Jest 覆盖 cfc-web ~语句10.11%/分支6.12%/函数7.51%/行9.98%;后端 JaCoCo N/A |
+| 17 | 变异测试 | 未发现 | 无 mutation 测试资产 |
+| 18 | 契约测试 | 已实测 | E2E 鉴权契约 401 拦截正确(此前从未实跑,R225 起已绿) |
+| 19 | QA 流程 | 待核实 | 无独立流程审计 |
+| 20 | 全项目代码审查 | 待核实 | 本次按每小时循环执行,未跑全项目审查(属专家团 Phase 4,未在本轮触发) |
+
+---
+
+## 4. 执行范围与实测结果(本轮回跑的真实信号)
+
+| 维度 | 命令/动作 | 结果 | 备注 |
+|------|-----------|------|------|
+| 后端离线编译 | `mvn -o test-compile`(/d/tools/apache-maven-3.9.9) | ✅ GREEN(exit 0) | main+test 源码离线编译通过 |
+| cfc-web Jest | `CI=true npx jest --ci` | ✅ 17 套件 / **116 例全过 / 0 败** | 零漂移 |
+| cfc-frontend Jest | `CI=true npx jest --ci` | ✅ 26 套件 / 426 例 = **423 过 / 3 跳 / 0 败** | 零漂移 |
+| E2E 内网无登录探针 | Playwright 1.63.0 探针 `/admin`、`/frontend` | ✅ **2/2 GREEN** | `/admin`→200「浠艾福管理后台」(url /admin/login);`/frontend`→200「首页」(bodyLen 234975) |
+| 后端全量 `mvn test` + JaCoCo | 引用 R125 基线 | 🟡 降级未实测本机 | 本地 MySQL 3306 CLOSED、9082 探活=000;引用 R125:**3501/3445=98.40%** |
+
+## 5. 用例总数 · 通过 · 失败
+- **cfc-web**:总数 116 · 通过 116 · 失败 0
+- **cfc-frontend**:总数 426 · 通过 423 · 跳过 3 · 失败 0
+- **E2E 内网探针**:总数 2 · 通过 2 · 失败 0
+- **后端全量(R125 基线引用)**:总数 3501 · 通过 3445 · 未通过 56(多为 TDD-RED 预期红 + 历史债,非本轮新增)
+- **langgraph@251(R125 基线引用)**:43/43 全绿
+
+## 6. 覆盖率
+- **cfc-web Jest 覆盖(基线,R117~R120 复现一致)**:语句 10.11% · 分支 6.12% · 函数 7.51% · 行 9.98%(整体偏低,集中在已测单元)
+- **后端 JaCoCo**:N/A(离线缺,未能实测;R125 亦未给出 JaCoCo 行覆盖)
+- **目标门禁**:JaCoCo ≥80% 未达成(未实测,标「待核实/未授权」)
+
+## 7. 回归与闭环判定(vs R120 基线)
+- Jest 双绿套件数量、通过数、失败数与 R120 逐项一致,**红例差集为空 → 零漂移,无新增生产回归**。
+- 后端离线 `test-compile` 连续 GREEN,无编译回归。
+- HEAD 自 R120 起 17 个 commit 均为 `docs(tdd)`/`chore`,无源码/需求变更 → 无新闭环需验证(R125 已闭环 B-123、B-69 落码)。
+
+## 8. 测试用例编写产出(依据 SRS 与需求变更闸门)
+- **SRS 闸门判定:闭合 → 跳过编写测试用例(零抖动)**。
+- 证据:`find -newermt 2026-11-10T11:28` 对 `docs/tdd/SRS.md`、`docs/需求分析/`、`docs/superpowers/specs/`、`docs/superpowers/api/API_REFERENCE.md` **零命中**;`git log --since=11:28` 对上述文档路径 **零变更**。
+- 17 个新 commit 均为报告(`docs(tdd)`)与版本号(`chore`),**无 SRS/需求/接口文档变更** → 不编写/不修订任何用例,避免仓库抖动,不提交不推送。
+
+## 9. 五要素问题清单
+**① P-9:cfc-frontend `api.test.js` 离线外联公网(离线约束缺口)**
+- 问题描述:用例 `PASS` 但实际向公网 `cfc.etotem.com.cn` 发起真实 POST(复现 46004),违反「不访问外部公网」约束。
+- 测试 bug 点:`__tests__/api/api.test.js:14` → `utils/api.js:323`。
+- 最优修改方案:用 `axios-mock-adapter` 拦截该外联或 `skip` 公网断言,改为本地 mock。
+- 修改目的:保证离线可复现、符合内网约束,避免误把公网副作用当断言。
+- 闭环方式:改为 mock 后重跑,期望 PASS 且网络面板无对 `cfc.etotem.com.cn` 的外联;通过标准=零外联+用例仍绿。
+
+**② 后端全量真红 56 项未闭环(历史债 + TDD-RED)**
+- 问题描述:R125 基线 3501 例中 56 项未通过,含 TDD-RED 预期红与历史债(如 `blank-key` S-cfc-31、37 红类),本机未重跑确认。
+- 测试 bug 点:`cfc-backend/src/test/**`(引用 R125 基线)。
+- 最优修改方案:起本地 MySQL/后端,跑 `mvn -o test` 区分「真红 vs 预期红」,对真红逐条修;RED 随实现转绿。
+- 修改目的:消除历史债、确认无非预期缺陷。
+- 闭环方式:连库全量 0 真红(预期红除外)+ JaCoCo≥80%;通过标准=报告红例差集仅剩明确标注的 TDD-RED。
+
+**③ B-69 `/api/mind/**` 鉴权(已落码待本机复评)**
+- 问题描述:强制登录已在 `84239ce22`(merge fix/b69) 落码,但本机未实跑复验。
+- 测试 bug 点:`cfc-backend` 路由鉴权配置(JwtInterceptor 白名单)。
+- 最优修改方案:E2E 注入凭据后访问 `/api/mind/**` 验证 200、未登录验证 401。
+- 修改目的:确认鉴权门禁生效,防越权。
+- 闭环方式:登录态 E2E 28/28 全绿;通过标准=未登录 401、登录 200。
+
+**④ JaCoCo ≥80% 门禁未达成(N/A)**
+- 问题描述:后端行/分支覆盖率缺度量,无法判定是否达 80% 门禁。
+- 测试 bug 点:CI 缺 JaCoCo 报告采集。
+- 最优修改方案:授权离线 JaCoCo 或环境就绪后采集 `target/site/jacoco`。
+- 修改目的:以量化覆盖率支撑门禁裁决。
+- 闭环方式:JaCoCo 行覆盖 ≥80% 且报告可复现。
+
+## 10. 待核实项
+- 登录态 E2E(无 `MACHINE_JSON_PATH` 凭据 →「待核实登录态」,降级为测试设计)。
+- langgraph@251 9000 复验(需 AI + 凭据)。
+- JaCoCo 覆盖率(离线缺,N/A)。
+- 全项目代码审查、探索性/兼容性/可用性/无障碍矩阵(无资产/脚本)。
+- 后端集成测试(本地 MySQL 3306 不可达)。
+
+## 11. 需用户单独授权才能继续的项(标注「未授权未执行」并给测试设计)
+| 项 | 档位 | 未执行原因 | 测试设计 |
+|----|------|-----------|----------|
+| 安全 SAST/DAST/依赖漏洞扫描 | execute(公网) | 未授权 | 接入 OWASP Dependency-Check + CodeQL,对 `cfc-backend` 做 SAST;对 `/admin`+/frontend 做 DAST;零高危为通过 |
+| 性能压测 | execute(公网/远端) | 未授权 | 对 `cfc.iwintrue.com` 授权内网地址跑 k6/Artillery,指标:P95<800ms、错误率<1% |
+| 后端连库全量 `mvn test` | review(需起服务) | 本地 MySQL/后端未起(3306/9082 不可达) | 起 MySQL+后端后跑 `mvn -o test`,区分真红/预期红 |
+| 登录态业务流 E2E | review(需凭据) | 无 `MACHINE_JSON_PATH` | 注入凭据后跑 `tests/e2e` 业务流(订单/测评/健康报告),28/28 为通过 |
+| langgraph 9000 复验 | review(需 AI+凭据) | 无 LLM 凭据 | 注入凭据复跑 `cfc-langgraph` 43 例,全绿 |
+
+## 12. 复评条件(达成即转「通过」)
+1. 连库 `mvn test` 0 真红(预期 TDD-RED 除外)+ JaCoCo ≥80%;
+2. 修 P-9 离线外联(mock 化,零公网副作用);
+3. 授权安全+性能+依赖扫描零高危;
+4. 登录态 E2E 28/28 全绿(含 B-69 鉴权复验);
+5. langgraph@251 复验 43/43 全绿;
+6. 历史债(blank-key S-cfc-31、37 红类等)归零;全项目代码审查执行完毕。
+
+---
+**产物说明**:本报告为自动化每小时循环产出,写入 `docs/tdd/orchestration/report-test-2026-11-10T1455.md`,**未提交、未推送、未改动任何生产源码**。敏感凭据(如 E2E 登录态)一律经环境变量/本地配置文件注入,本报告与日志不出现明文口令/令牌。现有 Jest 测试基于 mock API,不据此断言真实服务端行为。

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

@@ -408,3 +408,19 @@
 | B-36-Update(第 126 轮 · 第 29 轮零漂移) | 根级黑盒 23 例 16 红 | 测试 | **零漂移(引用 R125)**。本机 9082 未启动,根级黑盒未整跑,沿用 R125(16 红 = `ECONNREFUSED`,非产品回归) | 测试负责人(第 126 轮核验) | 2026-11-10 15:50 | 待处理(P1) |
 | B-13-Update(第 126 轮 · 第 3 轮观察) | 3 类硬编码 `127.0.0.1:3306` 的 `@SpringBootTest` | 研发/环境 | 硬编码仍在,本机 3306 不可达,沿用历史观察(非产品回归) | 测试负责人(第 126 轮核验) | 2026-11-10 15:50 | 观察(P2) |
 | B-69-Confirm(第 126 轮 · 维持销号) | `/api/mind/**` 匿名可达 | 研发 | **维持销号**。本轮 `admin-live` TC-A-U03「未登录访问后台受保护路由被拦截到登录页」作为独立断言通过(1.3m 套件内),印证鉴权契约稳定;后端 `MindFortuneControllerTest` 本轮沿用 R125 基线绿 | 测试负责人(第 126 轮复核) | 2026-11-10 15:50 | **已闭环(销号)** |
+
+### 第 127 轮(2026-11-10 17:30)新增与更新
+
+| 编号 | 问题 | 类型 | 本轮结论(R127) | 责任 | 登记时间 | 状态 |
+|---|---|---|---|---|---|---|
+| B-126-New | langgraph pytest 用例全绿但解释器不退出(`timeout` 杀进程,`PYTEST_EXIT=124`) | 测试/研发 | **新增(P1)**。251 实派 43 例全绿(1020.56s),随后 `timeout 1650` 以 124 退出;同类现象 R97/R84 曾记为「套件不收敛」。CI 会因此挂死,与「用例是否通过」是两件事。修法:`-p no:cacheprovider` + 显式 `os._exit`/`--timeout`,或 pytest 结束后 `sys.exit`。 | 研发(langgraph) | 2026-11-10 17:30 | 待处理 |
+| B-90-Update(第 8 轮) | 251 `/api/v1/chat`、`/api/v1/analyze` 长时零字节挂起 | 研发/运维 | **延续(P0 第 8 轮)**。本轮用**正确 schema** 复探(chat:`{query,user_id,conversation_id}` / analyze:`{report_id,user_id}`):两者 **90s 零字节(HTTP 000)**;同窗口 `/health`=200(6ms)、错误 schema 返 422(10~24ms) → 服务存活、仅 LLM 链路挂死。与「pytest 43/43 全绿」并存,说明单测未覆盖真实 LLM 链路。 | 研发/运维 | 2026-11-10 17:30 | 待处理 |
+| B-74-Update(第 127 轮 · **未复现**) | 251 `test_auto_tag` 4 例 LLM 401 | 研发/运维 | **未复现(观察第 1 轮)**。本轮 43/43 全绿(R126 为 39/43)。按纪律「连续 2 轮绿才销号」,维持观察。 | 研发/运维 | 2026-11-10 17:30 | 待观察 |
+| B-122-Confirm(销号后第 2 轮) | 189 节点不具备浏览器执行前提 | 运维 | **维持销号**。189 实跑 `admin-desktop` **5/5 全绿**(1.3m,第 2 轮);取证:Node v24.14.0 / Playwright 1.65.0 / `tests\e2e-live` 存在;**且 `tests/e2e-live/admin-live.spec.js` blob = `bb49dd1ce…`,与本机 `cfclub@05f48f12d` 完全一致**(仓库虽停在 `4de82cb81@feature/s-cfc-70-star-digest`,spec 版本无差异,结论有效)。 | 运维 | 2026-11-10 17:30 | 已闭环 |
+| B-69-Confirm(第 3 轮) | `/api/mind/**` 匿名可达 | 研发 | **维持销号**。线上匿名 POST `/api/mind/fortune` → **401「请先登录」**,与 `/api/energy/overview`、`/api/health/plan/list`、`/api/huawei-health/status` 三个对照组一致(4/4 = 401)。 | 研发 | 2026-11-10 17:30 | 已闭环 |
+| B-36-Update(第 30 轮零漂移) | 根级黑盒 23 例 16 红 | 测试 | **零漂移(本轮已实跑)**。`npx jest -c tests/jest.config.js` → **7 过 / 16 红**,全为 `ECONNREFUSED`(本机 9082 未启动)。 | 测试 | 2026-11-10 17:30 | 待处理(环境型) |
+| B-124-Update(第 3 轮) | TC 锚点度量口径不统一 | 测试 | **未闭环(P2 第 3 轮)**。本轮采用**可复算口径**并双报:827 TC 行 / 末列锚点非空 234(28.3%)/ 指向可执行用例 82(**9.9%**);另 SC 244 / 被 TC 引用 146(59.8%)。三套历史口径(17.1%/19.1%/10.6%)仍未归一。 | 测试 | 2026-11-10 17:30 | 待处理 |
+| B-95-Update(第 4 轮) | `192.168.16.204` 节点失联 | 运维 | **延续失联(P2 第 4 轮)**。`204:4090` → HTTP 000。浏览器任务由 189+本机两节点承担,未受影响。 | 运维 | 2026-11-10 17:30 | 待处理 |
+| B-125-Update(第 5 轮) | 远程 shell 等待时长未自适应 | 测试 | **部分缓解(P1 第 5 轮)**。v2(同 shell 轮询)在 650s 上限处截断(27 例、`EXIT=124`);改 v3(同 shell + `tee` 落盘 + 上限 1650s)后拿到完整 43 例结果。结论:**长任务必须落盘**,等待上限按历史最坏值(≥1650s)设定。 | 测试 | 2026-11-10 17:30 | 观察 |
+
+> **口径提示**:本轮「全量 3501 例 / 3445 过 = 98.40%」= 后端 2865 + web 116 + fe 426 + 根级 23 + langgraph 43 + 浏览器 28;红 49 = 后端 33 + 根级 16;skip 7 = 后端 4 + fe 3。

+ 49 - 0
docs/tdd/研发交接通知-2026-11-10-第127轮.md

@@ -0,0 +1,49 @@
+# 研发交接通知 · 第 127 轮(2026-11-10 17:30)
+
+> 来源:测试负责人自动化闭环 R127|基线 `cfclub @ 05f48f12d`
+> 全套件实跑:**3501 例 / 3445 过 = 98.40%**,红 49(后端 33 + 根级 16),skip 7
+> 门禁:**不通过(有条件)** — G2 49 红 / G9 锚点 9.9% / G11 无 CI
+
+---
+
+## 一、需要研发处置(按优先级)
+
+| # | 优先级 | 问题 | 证据 | 建议动作 |
+|---|---|---|---|---|
+| 1 | **P0** | **`/api/v1/chat` 与 `/api/v1/analyze` 线上 90s 零字节**(251:9000,`/health` 6ms 正常、schema 校验层 422 正常) | `curl --max-time 90` → HTTP 000 / 0 byte(两次) | 检查 LLM 凭据与上游超时;给 LLM 调用加显式 timeout + 降级,禁止无限挂起 |
+| 2 | **P0** | **EnergySystemFlowTest 6 例 500**(能量总览/日志/任务发放/许愿兑换) | `integration/EnergySystemFlowTest.java:116/150/182/212/246/282` | 取 500 的 `Caused by` 最内层;核对「孩子→家庭成员」重构后的成员解析;5001 若为设计错误码请写入契约 |
+| 3 | P1 | 微信登录 2 例返回 null(新 openid 建档 + 家庭创建) | `UserServiceWechatLoginTest`、`UserServiceWechatLoginContractTest:110` | 核对返回体契约(jwt/家庭/成员三段) |
+| 4 | P1 | 虚拟支付配置缺失未短路;ORD 未知前缀未路由 | `MembershipPaySwitchTest:209`、`PaymentServiceORDRoutingTest:83` | 配置缺失直接返回 null;补前缀白名单 |
+| 5 | P1 | 团队分润冷静期退款未全撤销 | `TeamProfitCronContractTest`(§8.2,`cancelled=0`) | 退款回调与定时任务竞态排序 |
+| 6 | P1 | Orchestration 失败态落库时机 | `OrchestrationEngineTest:176`、`OrchestrationIntegrationTest:105` | 若改异步回写,用例改轮询终态 |
+| 7 | **P0 契约** | **P-9 `DimensionRegistryMapContractTest` 3 例(第 9 轮)**:未知/缺失/空 legacyCode 语义未裁决 | `:76/:85/:92` | 需主理人裁决「透传 vs 归 null」后**单向**修改,避免两边各改一半 |
+| 8 | P1 | `@GetMapping` 8 处仍违 AGENTS.md;`application.yml` 7 处明文凭据(B-31/O-10) | `grep -rn @GetMapping cfc-backend/src/main/java` | 改 `@PostMapping` + `${ENV_VAR}` 占位 + gitleaks |
+
+## 二、测试侧已自处置(无需研发介入)
+
+- CfCommission 8 / ArticleAutoTag 4 / GrowthRecordSync 3 / TaskPlan 1 = **16 例装置红**,已定位到具体行号与修法(详见主报告 §7 #1~#4),下轮自修后定向复跑。
+- langgraph 43/43 全绿,但 `pytest` 在用例跑完后**解释器不退**(`timeout` 收尾杀进程,`PYTEST_EXIT=124`)→ 会挂死 CI,已登记 G-127-5,需研发侧加退出收尾(`os._exit` 或显式 `--timeout`)。
+
+## 三、与上轮对比
+
+| 项 | R126 | R127 | 变化 |
+|---|---|---|---|
+| 后端全量 | 未跑(仅 test-compile) | 2865/2828=**98.71%** / 33 红 | 与 R123 零漂移 |
+| langgraph | 39/43(B-74 复发 4 例) | **43/43** | ⬆ 改善(B-74 观察第 1 轮) |
+| 浏览器 | 28/28 | **28/28** | 持平(189 admin 第 2 轮 5/5,B-122 销号) |
+| 鉴权(mind) | 已落码 | 线上 **401** | B-69 连续 2 轮闭环 |
+| 红例总数 | 49 | **49** | 持平 |
+
+## 四、复验方式
+
+```bash
+# 后端定向(surefire 2.22.2 只认逗号分隔)
+cd cfc-backend && mvn -o -Dtest=CfCommissionServiceSettleTest,EnergySystemFlowTest test
+# langgraph(251)
+cd /sc-data/cfc/cfc-langgraph && .venv/bin/python -m pytest tests --ignore=tests/qna --ignore=tests/test_chat.py -q
+# 线上 AI 链路
+curl -s -o /dev/null -w "%{http_code} %{time_total}\n" -X POST http://192.168.16.251:9000/api/v1/chat \
+  -H 'Content-Type: application/json' -d '{"query":"你好","user_id":1,"conversation_id":"probe"}'
+```
+
+通过标准:上述 2 类后端定向全绿 + live chat/analyze 200 且有 body + pytest 正常退出(exit 0)。