automation-run-2026-11-10-R129.md 23 KB

测试负责人工作汇报 · 第 129 轮(2026-11-10 18:14~19:12)

执行档:review(内网 cfc.iwintrue.com 已授权;离线 mvn -o;未联网装依赖;每节点单任务) 基线 HEAD:ada6cb7a8(= origin/cfclub,跑测期间分支/HEAD 未漂移;窗口内仅 docs/chore 提交,git diff b6ed4af4a..HEAD -- src 为空) 分工:189=admin 浏览器套件|本机=frontend/shop/health 浏览器套件 + Jest + 后端聚合|251=langgraph pytest|204=失联(B-95) 结论:⛔ 不通过(有条件) — 三项阻塞:G2 57 红(langgraph B-74 复发 +8) / 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:50 — 39/43(4 红 auto_tag,401) 不通过(有条件) B-74 复发第 1 次
R127 11-10 17:30 2865 / 2828 / 98.71% / 33 红 43/43 全绿(B-74 未复现观察第 1 轮) 不通过(有条件) G2 49、G9 9.9%、G11
R128 11-10 18:08 2865 / 2828 / 98.71% / 33 红 43/43 全绿(B-74 销号) 不通过(有条件) G2 49、G9 9.9%、G11
R129(本轮) 11-10 19:12 2865 / 2828 / 98.71% / 33 红(与 R128 逐字段零漂移) 35/43(8 红:auto_tag 4 + intent 4)→ B-74 复发第 3 次 不通过(有条件) G2 57、G9 9.9%、G11
  • 本轮为该对象第 129 轮持续闭环审查,非首次。
  • 后端仍与 R127/R128 逐字段零漂移(2865/2828/33 红,红类集合一致:CfCommission 8 / EnergySystem 6 / ArticleAutoTag 4 / GrowthRecordSync 3 / DimensionMap 3 + 散例 9)。
  • langgraph 本轮发生回归(关键变化):R127/R128 连续两轮 43/43 → 本轮 35 passed / 8 failed(280.54s)。红因非代码回归(源码 24h 零提交):日志实证 Authentication Fails, Your api key: ****ab12 is invalid(401)+ You've reached the API rate limit for free users(429)+ ConnectError('All connection attempts failed') → LLM 凭据失效 + 免费额度耗尽 → test_auto_tag 4 例 chat 500、test_intent 4 例分类降级为 chat。
  • SRS / 用户场景 / 接口文档零变更(近 24h 仅测试侧自身历史提交)→ 按纪律不新增/更新用例(G12 ✅)。
  • B-90 live 契约同步转绿(chat 200/6.79s/752B、analyze 200/9.99s/1082B,正确整数 schema)——与 pytest 内部 LLM 链路失败并存,说明「直连 chat 主链路可用,但意图分类/自动打标等依赖额外 LLM 调用的子链路被凭据/限流击穿」。

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 例(全量可跑,XML 18:06 新鲜);前端 Jest 26 套件 426 例;管理端 17 套件 116 例;浏览器硬契约 28 例;langgraph 43 例。
  • 质量目标:G1≥95%、G2≤10 红、G6 28/28、G7 0 红、G9≥80%。
  • 风险点:① langgraph LLM 凭据不稳定(B-74 第 3 次复发,直接击穿 AI 链路)② 后端 33 红(14 例产品类)③ SRS 锚点 9.9%(B-124)④ 无 CI 全量(G11)。

3. 20 类测试覆盖矩阵(三态:已实测 / 未发现 / 待核实)

# 测试类型 状态 证据
1 单元测试 ✅ 已实测 后端 339 类 2865 例(surefire 18:06);web 116;fe 426
2 组件测试 ✅ 已实测 Vue shallowMount 组件用例(17+26 套件)
3 接口 API 测试 ✅ 已实测 364 Controller MockMvc/直调用例;线上 4 端点鉴权探针 401
4 集成测试 ✅ 已实测 integration.*(EnergySystem 6×500 / GrowthRecord 3 / GuideModule 1 / DimensionMap 3 红)
5 系统/端到端 E2E ✅ 已实测 浏览器 28/28(admin 5 / frontend 6 / shop 4 / health 13)
6 冒烟测试 ✅ 已实测 浏览器 28 例 + 双 Jest 全绿即冒烟面
7 回归测试 ✅ 已实测 后端/fe/web 与 R128 零漂移;langgraph 相对 R128 +8 红(B-74 复发)
8 探索性测试 ⚠️ 待核实 仅定向探针(鉴权 4 端点 + live chat/analyze),无 chartered 探索会话
9 验收 UAT / BDD ⚠️ 待核实 无 BDD(cucumber/gherkin)执行证据
10 性能测试 ⛔ 未授权未执行 压测属 execute 档(需联网授权)
11 可靠性测试 ⚠️ 待核实 无混沌/恢复演练;B-74 复发本身提供「LLM 依赖单点」可靠性信号
12 安全测试(SAST/DAST/SCA) ⛔ 未授权未执行 依赖扫描/DAST 需联网;仅静态项(§7 #10)
13 兼容性测试 ⚠️ 待核实 仅 Chromium;无多端/多浏览器矩阵
14 可用性测试 ⚠️ 待核实 无真实用户可用性证据
15 无障碍测试 ⚠️ 待核实 无 axe/WCAG 扫描
16 覆盖率度量 ⚠️ 已实测(低) cfc-web 语句 10.09% / 分支 6.12% / 函数 7.50% / 行 9.97%;后端 JaCoCo 未接入
17 变异测试 ⛔ 未发现 无 PIT/mutation 资产
18 契约测试 ✅ 已实测 鉴权 4/4=401;健康 13/13=401;商城排序 4/4;langgraph live chat/analyze 200 有 body
19 QA 流程 ⚠️ 待核实 129 轮闭环可追溯;门禁未脚本化(G11)
20 全项目代码审查 ⚠️ 待核实 仅规范扫描(@GetMapping 8 处仍违 AGENTS.md),未跑全量静态审查

4. 实测结果明细(本轮真实信号,全部本机/节点实跑,无引用)

# 维度 命令/方式 节点 结果
1 后端全量(采信+独立重聚合) R128 18:06 完成 mvn -o -B clean test(39m20s)→ 本机独立聚合 339 XML 本机 339 类 / 2865 例 / 2828 过 / 30F+3E+4S = 98.71%;33 红;0 沉默 XML;红类集合与 R128 逐类一致
2 cfc-web Jest CI=true npx jest --ci --runInBand 本机 ✅ 17 套件 / 116 例全绿(13.0s)
3 cfc-frontend Jest CI=true npx jest --ci --runInBand 本机 ✅ 26 套件 / 426 例 = 423 过 / 3 skip / 0 红(13.4s)
4 根级黑盒 Jest npx jest -c tests/jest.config.js --ci 本机 ⚠️ 23 例 = 7 过 / 16 红(ECONNREFUSED 9082 未启动,B-36 第 31 轮零漂移)
5 langgraph pytest 251 POST /api/shell → .venv/bin/python -m pytest tests --ignore=tests/qna --ignore=tests/test_chat.py -q --tb=line(tee /tmp/r129_pytest.log) 251 ❌ 35 passed / 8 failed(280.54s):test_auto_tag 4 例(chat 500:ConnectError/401 api key ****ab12 invalid)+ test_intent 4 例(429 free-tier → 分类降级 chat)→ B-74 复发第 3 次
6 管理端 UI E2E playwright -c live --project=admin-desktop(cmd /c 启动) 189 ✅ 5/5(1.3m,TC-A-U01~U05 含滑块+真实登录入主框架)→ B-122 销号维持(第 3 轮)
7 小程序 H5 E2E --project=frontend-mobile --workers=1 本机 ✅ 6/6(47.8s,TC-F-U01~U06)
8 商城排序契约 --project=shop-api 本机 ✅ 4/4(4.5s,TC-S-U01~U04)
9 健康鉴权契约 -c playwright.config.health.js 本机 ✅ 13/13(3.9s,全部 401;TC-HP-U01~U03 仍 401 → B-61 闭环维持)
10 线上鉴权探针 curl -X POST 4 端点匿名 本机 ✅ 4/4 = 401 → B-69 连续 4 轮闭环(销号维持)
11 langgraph live 契约 POST /api/v1/chat / /api/v1/analyze(正确整数 schema,90s/30s cap) 本机→251 ✅ chat 200 / 6.79s / 752B;analyze 200 / 9.99s / 1082B → B-90 观察第 1 轮转绿(与 #5 失败并存:主链直连通过、子链 LLM 调用被限流)
12 节点探活 curl 4 节点 251:4096=200 / 251:9000=200 / 189:4090=200 / 204=000(B-95 延续失联)

全量计数(去重口径:后端 2865 + web 116 + fe 426 + 根级 23 + langgraph 43 + 浏览器 28)

  • 合计 3501 例,通过 3437 = 98.17%,红 57(后端 33 + 根级 16 + langgraph 8),skip 7(后端 4 + fe 3)。
  • 相对 R128(3445 过 / 49 红 / 98.40%):通过 −8、红 +8(100% 来自 langgraph B-74 复发)。

5. 覆盖缺口清单

缺口 现状 风险 建议测试设计 优先级 闭环方式
G-129-1 langgraph LLM 依赖单点(B-74 复发) pytest 43 例中 8 例依赖真实 LLM(auto_tag 4 + intent 4),凭据失效/限流即红 AI 对话、意图分类、自动打标在凭据波动时全链路降级 → 生产可用性风险 ① 主断言改确定性桩(mock LLM 返回),真实 LLM 走 @pytest.mark.llm 冒烟分离 ② CI 配专用 key + 配额告警 P0 运维轮换 key 后 43/43 连绿 2 轮;且 -m "not llm" 子集可离线稳定全绿
G-129-2 SRS 可执行锚点 827 TC 行,末列锚点非空 234(28.3%),指向可执行用例 82(9.9%) 需求→用例不可双向追溯 每个 spec 章节强制 ≥1 可执行 anchor P1 末列补锚点后重算 ≥80% 才过 G9
G-129-3 场景覆盖 SC 244,TC 引用 146(59.8%) 98 个场景无用例 P0 场景优先补正常/异常/边界 P1 sc-key-map ↔ TC 台账双向对账
G-129-4 后端产品红 14 例 EnergySystem 6×500、Orchestration 2、UserWechatLogin 2、MembershipPay 1、PaymentORD 1、TeamProfitCron 1、platform_fee 1 五维能量/微信登录为高频入口 线上复现后再定产品/装置 P0 研发修复后定向复跑转绿
G-129-5 后端装置红 16 例 CfCommission 8、ArticleAutoTag 4、GrowthRecordSync 3、TaskPlan 1 掩盖分佣/打标真实回归 按 §7 #1~#4 修装置(测试侧自处置) P1 定向复跑 16/16 绿
G-129-6 无 CI 后端全量 2865 例仅本地人工跑 回归不可持续 GitLab CI blocking job(缓存 m2) P1 CI 可查红绿 + 阻断合并
G-129-7 覆盖率空白 后端无 JaCoCo;web 语句 10.09% 无法度量单测有效性 后端接 jacoco-maven-plugin P2 报告入库可复算
G-129-8 204 节点失联 4090 等端口 000 浏览器任务无冗余节点 运维恢复 P2 探活 200 + 实派 1 例绿

6. 域结论表

审查维度 负责专家 结论 关键证据
单元·组件级 苏雅 不通过(局部) 后端 33 红中 16 例装置型;web 覆盖率 10.09%
集成·接口级 柯砚 不通过(局部) integration 4 红类(EnergySystem 6×500 等)
系统·验收级 白樾 有条件通过 浏览器 28/28 连续第 3 轮;无 UAT/BDD
测试保障级 闻朔 有条件通过 28 例冒烟面稳定;B-74 复发暴露「单点依赖无灰度」
性能·可靠性 骆骋 未实测(未授权) 压测未做;B-74 复发为可靠性负面信号(LLM 单点)
安全 关屿 不通过(局部) 鉴权 4/4=401 达标;@GetMapping 8 处 + 明文凭据 B-31 未改造
兼容·体验 阮清 待核实 仅 Chromium;无多端矩阵/axe
流程·度量·代码 何序 不通过(局部) G9 9.9%;G11 无 CI;B-124 口径未归一

7. 五要素问题清单

#1【P0·环境/研发】langgraph test_auto_tag 4 例 + test_intent 4 例红 — B-74 复发第 3 次(本轮新增)

  • ① 问题描述:251 pytest 43 例中 8 例失败(280.54s)。test_auto_tag_endpoint_responds / _valid_format / _short_content / _empty_content 报「chat 端点返回 500」(ConnectError('All connection attempts failed'));test_classify_analysis / _recommend / _mind / _health 断言 Intent.CHAT ≠ 期望(日志 429 ... API rate limit for free users → 分类器降级 chat)。另见 401 Authentication Fails, Your api key: ****ab12 is invalid。
  • ② 测试 bug 点:cfc-langgraph/tests/test_auto_tag.py:93/141、cfc-langgraph/tests/test_intent.py:16/23/30/37(断言直接依赖真实 LLM 输出)。
  • ③ 最优修改方案:① 运维轮换 251 LLM 凭据并提升配额(当前 free tier);② 测试侧把 8 例改为 mock LLM 的确定性断言,真实调用拆分到 @pytest.mark.llm 冒烟集;③ 对 ConnectError 加显式超时+重试+降级断言。
  • ④ 修改目的:让 AI 子链路在凭据波动时不整体红,同时保留真实 LLM 冒烟作为独立信号。
  • ⑤ 闭环:pytest -m "not llm" 全绿(离线稳定)+ pytest -m llm 43/43 连绿 2 轮;B-74 连续 2 轮无复现后销号。

#2【P1·装置】CfCommissionServiceSettleTest 8 例「Wanted but not invoked」— 与 R128 相同

  • ①:settle_* 8 例报 cfBalanceService.earnByRule(...) / ppointConsumptionLogMapper.insert(...) 未被调用(提前 return 后断言不成立)。
  • ②:cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceSettleTest.java(8 个 settle_* 方法)。
  • ③:补 settle 路径前置守卫桩(订单状态/受益人/家庭关系),用 ArgumentCaptor 校验实付/基数/档位。
  • ④:消除装置假红,恢复分佣资金链路守护。
  • ⑤:定向复跑 12/12 绿 ×2 轮。

#3【P1·装置】ArticleAutoTagServiceTest 4 例线程池断言 — 与 R128 相同

  • ①:3 例 Wanted 1 time 未发生、1 例 Never wanted here 反被调用(异步时序)。
  • ②:cfc-backend/src/test/java/com/etotem/cfc/unit/ArticleAutoTagServiceTest.java。
  • ③:verify(executor, timeout(1000)).execute(any());非空用例 clearInvocations 后断言 never。
  • ④:区分异步调度与同步执行,避免时序误判。
  • ⑤:定向复跑 4/4 绿 ×2 轮。

#4【P1·装置】GrowthRecordSyncFlowTest 3 例 — 与 R128 相同

  • ①::164/:204 NPE;:130 期望 true 得 false。
  • ②:integration/GrowthRecordSyncFlowTest.java:130/164/204。
  • ③:补 getXxxByFamilyMember mock 返回;布尔用例改断言业务码/message。
  • ④:消除重构遗留夹具滞后。
  • ⑤:定向复跑 10/10 绿。

#5【P2·装置】TaskPlanServiceTest 1 例 — 与 R128 相同

  • ①:applyAndActivate_无active实例时新建并置active 期望 100 得 null。
  • ②:unit/TaskPlanServiceTest.java。
  • ③:doAnswer 回填主键或 ArgumentCaptor 校验保存对象。
  • ④:使激活路径可断言。
  • ⑤:定向复跑 4/4 绿。

#6【P0·产品】EnergySystemFlowTest 6 例全 500(五维能量核心链路)— 与 R128 相同

  • ①:parentGetsEnergyOverview 等 4 例期望 200 得 500;childExchangesWithInsufficientEnergy_Fails 得 false;userWithoutFamily_Fails 得 5001。
  • ②:integration/EnergySystemFlowTest.java:116/150/182/212/246/282。
  • ③:取 500 最内层 Caused by,对照 /api/energy/* 的成员解析;5001 若为设计错误码写入契约。
  • ④:五维能量是主线,常红意味着能量查询/兑换可能真实不可用。
  • ⑤:修复后定向复跑 7 例全绿 + 线上 /api/energy/overview 带 token 返 200。

#7【P1·产品】Orchestration 2 例 — 与 R128 相同

  • ①:失败原因枚举落库时机与断言不匹配。
  • ②:orchestration/OrchestrationEngineTest.java:176、OrchestrationIntegrationTest.java:105。
  • ③:核对枚举落库时机;异步则轮询终态。
  • ④:影响任务流转与结算。
  • ⑤:2 类全绿 + 「失败→重试→终态」回归。

#8【P1·产品】微信登录 2 例 + MembershipPay 1 例 + PaymentORD 1 例 — 与 R128 相同

  • ①:微信首登返回 null;虚拟支付配置缺失未短路;ORD 未知前缀未路由。
  • ②:service/UserServiceWechatLoginTest.java、UserServiceWechatLoginContractTest.java:110、MembershipPaySwitchTest.java:209、PaymentServiceORDRoutingTest.java:83。
  • ③:按契约核对返回体;配置缺失短路;ORD 补白名单。
  • ④:登录与支付是营收入口。
  • ⑤:3 类全绿 + 线上登录取 token 冒烟。

#9【P1·产品】TeamProfitCronContractTest 冷静期退款 — 与 R128 相同

  • ①:refundWithinCooling_cancelAllRecordsFundsNotPaid 断言 cancelled=0 应为 true。
  • ②:unit/TeamProfitCronContractTest.java。
  • ③:退款回调置 cancelled 且不发放;核对定时任务竞态。
  • ④:冷静期退款错发是资金损失。
  • ⑤:22 例全绿 + 竞态顺序用例。

#10【P0·契约待裁决】DimensionRegistryMapContractTest 3 例(P-9 第 10 轮)— 与 R128 相同

  • ①:未知/缺失/空 legacyCode 期望与实际不符(null vs 透传、400 vs 200)。
  • ②:integration/controller/DimensionRegistryMapContractTest.java:76/85/92。
  • ③:主理人裁决「未知 legacyCode 透传 or 归 null」后单向改实现或用例。
  • ④:连续 10 轮红,成为 G2 固定分母。
  • ⑤:裁决后定向复跑 7/7 绿并销号。

#11【P1·安全/流程】@GetMapping 8 处 + 明文凭据 B-31 — 与 R128 相同

  • ①:@GetMapping 8 处违 AGENTS.md;application.yml 7 处明文凭据。
  • ②:grep -rn "@GetMapping" cfc-backend/src/main/java;application.yml。
  • ③:改 @PostMapping 并同步前端;凭据改 ${ENV_VAR} + gitleaks 预检。
  • ④:GET 参数泄露;明文凭据可被直取。
  • ⑤:grep -c @GetMapping=0;gitleaks 0 命中。

8. 度量快照

指标 数值 环比
测试类(后端) 339 与 R128 一致
后端用例 2865(2828 过 / 33 红 / 4 skip) 一致
全量用例(去重) 3501(3437 过 / 57 红 / 7 skip = 98.17%) 通过 −8、红 +8
langgraph 35/43(8 红) R128 43/43 → 回归 +8
浏览器 28/28 连续第 3 轮
用例台账 TC 行 / 唯一编号 827 / 284 一致(SRS 零变更)
可执行锚点 82(9.9%)/ 末列非空 234(28.3%) 口径见 B-124
用户场景 SC 244,TC 引用 146(59.8%) 一致
Controller 364 —
@GetMapping 违规 8 未整改

9. 门禁结论

门禁 判据 实测 结论
G1 全量通过率 ≥95% 98.17%(3437/3501) ✅
G2 红例数 ≤10 57(后端 33 + 根级 16 + langgraph 8) ❌
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(admin 5 + frontend 6 + shop 4 + health 13) ✅
G7 langgraph 0 红 8 红(35/43)→ B-74 复发第 3 次 ❌
G8 鉴权契约 全 401 线上 4/4 + 契约 13/13 ✅
G9 SRS 锚点 ≥80% 9.9%(严格)/ 28.3%(宽松) ❌
G10 双节点派发 251 + 189 均实派 251 ✅(43 例实派)/ 189 ✅(5/5) ✅
G11 CI 含后端全量 存在 blocking 全量 无 ❌
G12 用例入库 本轮有新增/更新 SRS 零变更 → 不新增(合规) ✅

总裁决:不通过(有条件)

  • 阻塞放行:G2 57 红(较 R128 +8,全部来自 langgraph)、G9 9.9%、G11 无 CI。
  • 本轮回归(关键):langgraph 43/43 → 35/43,红因 401 api key invalid + 429 free-tier rate limit + ConnectError → LLM 凭据/配额击穿,非代码回归(源码零提交)。
  • 本轮正向:G6 浏览器 28/28 连续第 3 轮;B-122 189 节点销号维持;B-69 鉴权 4/4=401 连续 4 轮;B-90 live chat/analyze 首次 200 有 body(观察第 1 轮);后端/fe/web 零漂移。
  • 放行建议:内网灰度可放(浏览/登录/商城/健康鉴权均绿);不支撑正式发布——AI 子链路(意图分类/自动打标/对话记忆)在凭据波动时不可用,需先闭环 G-129-1。

10. 本轮执行合规声明

  • 未联网安装依赖、未启停线上服务、未修改生产源码;仅新增测试脚本与本报告/台账。
  • 未触碰他人 WIP(git status --porcelain 已跟踪改动 0)。
  • 浏览器严格「每节点单任务」:189 跑 admin;本机串行跑 frontend→shop→health(workers:1)。
  • 补测覆盖:后端独立重聚合 339 XML(验证 R128 基线零漂移)、251 实派 pytest(tee 落盘取回完整 summary)、189 实派 admin。
  • 一切结论以本轮实测证据为准,历史轮次仅作对照。

11. 结果有变化 → 提交远程 + 通知研发

变化点(相对 R128):

  1. langgraph 43/43 → 35/43(+8 红):test_auto_tag 4 + test_intent 4,根因 LLM 凭据 401 + 429 限流 → B-74 复发第 3 次(P0)。
  2. B-90 live chat/analyze 首次 200 有 body(观察第 1 轮,需连续 2 轮销号)。
  3. B-122 189 节点 admin 5/5 第 3 轮绿(销号维持)。
  4. 后端/fe/web/根级/浏览器零漂移;全量 98.17%(−0.23pp,全部来自 langgraph)。

提交流程:docs/tdd/test/automation-run-2026-11-10-R129.md + docs/tdd/orchestration/report-test-2026-11-10-R129.md + blockers.md(B-74-Update 复发第 3 次 / B-90-Update 观察第 1 轮 / B-122-Confirm 第 3 轮 / B-69-Confirm 第 4 轮 / B-36-Update 第 31 轮 / B-95-Update)→ git add 上述文件 → git commit → git push origin cfclub。

研发通知(静默模式不触发 Agent Mail,经 notice 文件 + 提交消息传递):

  • 【P0 立即处理】langgraph LLM 凭据:251 .env 的 API key ****ab12 已失效(401),且 free tier 配额耗尽(429)。需运维轮换有效 key + 提升配额;否则 AI 对话/意图分类/自动打标在真实用户侧不可用。
  • 【P1】测试侧改造:8 例 LLM 依赖用例改 mock 确定性断言,真实调用拆 @pytest.mark.llm 冒烟。
  • 【延续】后端 33 红:产品类 14 例(EnergySystem 6×500 优先)+ 装置类 16 例(CfCommission 8 优先)。
  • 【延续】G9 9.9% / G11 无 CI:需产品/研发协同补锚点与建 CI 全量门禁。