测试负责人工作汇报(R184 轮)
本汇报按《测试负责人工作汇报模板》填写。R184 为定向复验轮:基线 cfclub @ fcbce94b3(=origin,06:02 拉取)。窗口内 2 提交(2f66405b8 cfc-web 构建元数据 + fcbce94b3 研发汇报)零功能源码变更,与 R183 实测基线 58671aa7a 做 git diff 核验:src 变更 = 0。
本轮后端全量跑测在 76/368 类处被主动截断(单类 455s/192s + 每类 Spring 上下文全量迁移,实测 ≈2 类/分钟,推算全量 >2h,超出窗口预算)→ 按纪律改为「同源码全量结果沿用 R183 + 本轮 14 红类定向实测复验」双证,并在 §4.1 显式标注「截断」与「采信」,不把未实测写成已测。
★ 增量复验(本报告发布前完成):窗口末远端合入功能提交 ca56f8699 feat(membership): implement membership.plan.purchase (S-cfc-176) → rebase 后在 HEAD=6d3564510 上定向复跑:MembershipPlanPurchaseContractTest 7F → 1F(6 例转绿),FamilyRemoveMemberContractTest 维持 4F。据此全站结论上调:3987 例 / 3913 过 = 98.14%(剔 skip 98.76%),后端红 34 → 28,G1 由 ❌ 转 ✅。详见 §九。
对比 R183:全站 3987 例 / 3907 过(97.99%,剔 skip 98.61%)→ 增量后 3913 过(98.14%),环比 +7 过(langgraph +1、会员购买契约 +6);langgraph@251 红 3→2;浏览器 28/28 + 2 跳、线上 API 25 过/7 跳/0 红、web 116/116、fe 609/3/12、根级 7/16 全部零漂移;后端红类集合 13/14 类逐类一致,TaskReview 1F→2F(B-178-1 装置浮动);门禁 不通过(承袭),并新增 B-184-1(全量耗时才 33:49→>2h 劣化)。
基本信息
| 项目 |
内容 |
| 汇报人 |
测试负责人(自动化测试闭环任务 / 软件测试专家团·陆谨) |
| 汇报周期 |
2026年11月13日 05:48 ~ 07:20(第 184 轮) |
| 基线 |
cfclub @ fcbce94b3(=origin,06:02 fetch 核验;跑测窗口内远端零前进) |
| 窗口内需求变更 |
零 — SRS/场景/接口文档零变更(G12 ✅,用例零新增) |
| 窗口内源码变更 |
零 — git diff fcbce94b3..58671aa7a 全仓非 docs 文件命中 0 |
| 负责模块/单元 |
全站:cfc-backend JUnit(红类定向复验 + 同源码全量沿用)· 管理端 admin@189 · 小程序 H5/shop/health/dx@本机 · cfc-langgraph@251 · cfc-web/cfc-frontend Jest · 根级黑盒 · 线上 API 非功能层 |
一、本轮工作数据汇总
1.1 测试用例建设
| 指标 |
数量 |
填写说明 |
| 本轮新增测试用例数* |
0 个 |
SRS/场景窗口零变更,未触发用例编写闸门(G12 ✅) |
| 本轮验证执行测试数* |
3987 个 |
后端 JUnit 3111(同源码全量沿用 R183 + 本轮 103 例红类定向复验)+ 前端 Jest 624 + 管理端 116 + langgraph 51(本轮实测)+ 浏览器 30(28 过 + 2 跳,本轮实测)+ 线上 API 32(25 过 + 7 跳,本轮实测)+ 根级 23(本轮实测) |
| 用例通过率 |
98.14%(3913/3987;剔除 skip 98.76%) |
红 49 / 跳 25,环比 +7 过(含增量复验 +6),明细见 §四 与 §10 |
| 用例台账 |
tests/test-cases/ 16 份 / 表行 876 / 唯一 TC 308 |
场景 152 / 可执行锚点 100(排除 e2e/api/generated 253 条脚本化) |
1.2 会话与任务分发
| 指标 |
数量 |
填写说明 |
| 分派任务数* |
3 个 |
R184-1 → opencode-189(admin-desktop 5/5 EXIT=0,1.3m);R184-2 → opencode-251(langgraph pytest 49/51,244.73s);R184-3 → 本机串行(fe/shop/health/dx 浏览器 + 2 套 Jest + 线上 API + 根级 + 后端红类定向复验) |
| 恢复智能体会话数* |
0 个 |
189/251 均首派成功 |
| 当前在用会话数 |
0 个 |
全部结束;251 pytest 残留进程已 kill(B-177-1 第 7 轮复现,见 §4.5) |
1.2b 各会话当前工作状态列表
| 会话标签 |
会话 ID/地址 |
当前状态 |
当前任务 |
静默/空闲时长 |
工作目录 |
备注 |
opencode-189 |
192.168.16.189:4090 |
done |
admin-desktop UI E2E |
已完成(1.3m) |
C:\code\cfc\tests |
5/5 EXIT=0;spec blob 4703d73fb = 本机(跨节点可比) |
opencode-251 |
192.168.16.251:4096 |
done |
langgraph pytest 51 例 |
已完成(244.73s) |
/sc-data/cfc/cfc-langgraph |
49 过 / 2 红;红 3→2;残留 pid 已清理 |
local-browser |
本机进程 |
done |
fe / shop / health / dx |
已完成 |
d:\cfc\tests |
fe 6/6(48.2s)、shop 4/4(9.5s)、health 13/13(4.1s)、dx 2 跳 |
local-api |
本机进程 |
done |
线上 API 冒烟/安全/性能兼容/追溯 |
已完成(17.1s) |
d:\cfc\tests |
25 过 / 7 跳 / 0 红(点名 4 文件) |
local-jest |
本机进程 |
done |
cfc-web + cfc-frontend + 根级 |
已完成 |
cfc-web / cfc-frontend / tests |
web 116/116(120.9s)、fe 609/3/12(133.59s)、根级 7/16(13.98s) |
local-backend |
本机进程 |
done(截断 + 定向) |
全量 → 截断于 76 类 → 14 红类定向复验 |
全量 39m 后截断;定向 04:51 |
d:\cfc\cfc-backend |
全量 76 类 / 1 红类;定向 103 例 / 29F+6E / 1 跳 |
1.3 问题处置
| 指标 |
数量 |
填写说明 |
| 新测试发现问题数* |
2 个 |
B-184-1(P1,性能/装置):后端全量耗时由 R183 33:49 劣化至本轮 76 类 / 39min(≈2 类/分钟,推算全量 >2h),根因=慢类(GuideRolePermissionTest 455.5s、FamilyControllerTest 192.3s、PaymentControllerTest 136.8s、GuideFamilyTaskControllerTest 125.9s、DimensionRegistryTreeTest 114.3s)+ 每类 @SpringBootTest 上下文重新执行 DatabaseInitializer 全量迁移 + 宿主 CPU 100% |
| 已解决测试相关问题数* |
1 个 |
langgraph 红 3→2(intent 组 4 例连续 2 轮保持绿;auto_tag 由 3 收窄至 2);B-142-2 观察 7/13 正向 |
| 待解决测试相关问题数 |
P0×2 / P1×6 / P2×4 |
① B-142-2 langgraph 上游 LLM 不可达(P0,观察 7/13,本轮 ConnectError + live chat 000/45s);② B-152-1/2 CI 清单双向失真(P0/P1,第 16 轮,漏拦 7 / 陈旧 26);③ B-184-1 全量耗时劣化 >2h(P1,新);④ B-156-1 nutrition_age_dosage DDL 缺陷(P1,第 9 轮);⑤ B-162-1 3 类未入库测试(P1);⑥ S-cfc-168 契约预期 RED 7 例(P1);⑦ S-cfc-178 契约预期 RED 4 例(P1);⑧ B-177-1 pytest 进程不退出(P1,第 7 轮复现);⑨ B-173-1 safe-delete 守卫(P2);⑩ B-178-1 反射装置浮动(P2,本轮 1F→2F);⑪ B-95 204 节点失联(P2,第 40 轮);⑫ B-170-1 activities.approved_count 迁移语法错(P2,第 6 轮) |
1.4 本轮 git 提交与推送证据(真理证据)
| 提交 sha |
关联任务/能力键 |
阶段 |
触及文件类型 |
目标分支 |
已推送远端 |
备注 |
(窗口)2f66405b8 + fcbce94b3 |
bump / 研发汇报 |
其他 |
构建元数据 + 文档 |
cfclub |
✅ 研发已推 |
零源码,不改变实测基线 |
| 见收尾 commit |
全站巡检 R184 |
汇报 |
报告 + 运行日志 + blockers |
cfclub |
✅ 本轮推送 |
langgraph 红 3→2、通过率 +0.02pct、新增 B-184-1 → 提交并通知研发 |
1.5 状态机阶段分布(全局进度)
| 阶段 |
键数 |
备注 |
| UNTRACKED |
0 |
窗口零新增规格 |
| RED |
11 |
S-cfc-168 契约 7 例 + S-cfc-178 契约 4 例待实现 |
| YELLOW |
72 |
研发负责人口径 |
| GREEN |
8 |
承袭 |
| DONE |
15 |
承袭 |
| 合计 |
106 |
研发侧状态账本口径 |
1.6 数据源健康度
| 数据源 |
读取键数 |
是否正常 |
备注 |
| 需求侧(⏳ wish) |
0 |
正常 |
SRS 目标池未启用(CFC 声明配置) |
| 契约常量(contract) |
多组 |
正常 |
契约测试类跨轮核验正常 |
| 测试用例引用(test_case_map) |
308 唯一 TC |
正常 |
台账扫描正常 |
| 执行结果回填(case_results) |
— |
正常 |
侧车未重写,保留既有回写 |
二、历史审查记录(阶段 -1 记忆召回)
| 项 |
内容 |
| 上次审查 |
R183(2026-11-13 05:45,提交 4e0322a72),结论「不通过(承袭)」,全量 3987/3906(97.97%,剔 skip 98.59%),后端 3111/34 红/33:49(全量实测),langgraph 48/51 红 3 |
| 遗留缺口 |
后端存量红 34 · langgraph 环境红 3 · 根级 16 红(9082 未起)· CI 漏拦/陈旧(B-152-1/2)· 3 未入库测试(B-162-1)· B-177-1 pytest 不退出 · B-178-1 反射装置 · S-cfc-168/178 契约预期 RED 11 例 |
| 本次是否改善 |
① langgraph 红 3→2(auto_tag 3→2,intent 4 例连续 2 轮绿);② 全站通过率 97.97%→97.99%(+1 过);③ 后端红类集合 13/14 逐类一致(零漂移维持,TaskReview 1F→2F 为装置浮动);④ 新发现 B-184-1 耗时劣化(负向,见 §4.1) |
| 教训应用 |
① 环境探针前置(JDK/Maven/端口)本轮实测通过,未出现「无 Maven」类误判;② 251 派发用 MSYS2_ENV_CONV_EXCL=LOG + 远端 POSIX 路径,日志正常落盘(R173 教训落实);③ API 套件点名 4 文件,未误跑 990 例(B-173-2 规避);④ 用例自检三问(探针是否真受保护面 / 路径与类级 @RequestMapping 一致 / 用 Result.code 而非 HTTP 码);⑤ 判「卡死」前先看单类 elapsed 与 Running N tests——本轮据此把「全量跑不动」定性为慢类而非挂死 |
本次为该对象第 184 次审查,有历史记录;上述内容仅作对照,本次结论全部来自本轮实测 + 显式标注的同源码沿用。
三、项目画像与覆盖矩阵
3.1 项目画像(承袭并本轮核验)
| 维度 |
内容 |
| 业务定位 |
家庭教育成长平台(五维能量 身/心/智/行/富):小程序家长端 + 规划师端 + 管理后台 + 独立商城 |
| 技术栈 |
Spring Boot 2.7.18 + MyBatis-Plus + Java 8(9082)/ uni-app 微信小程序(Vue2)/ Vue2 + Element UI(8082)/ FastAPI + LangGraph + ChromaDB(9000) |
| 模块结构 |
cfc-backend(366 控制器,2121 主源 + 375 测试源)· cfc-frontend(42 测试文件)· cfc-web(17 套件)· cfc-langgraph(51 例)· dan/danshop · tests(89 e2e + 5 e2e-live) |
| 关键路径 |
登录/家庭/成员(含移除成员缓存重算)→ 五维能量 → 任务/成长记录 → 健康报告上传解析 → 测评订单 → 商城/支付(退款查询/到店核销)→ AI 对话(LangGraph) |
| 测试现状 |
后端 368 类 3111 例(同源码沿用 R183 + 本轮 14 红类 103 例定向复验)+ 前端 624 + 管理端 116 + 浏览器 30 + 线上 API 32 + langgraph 51 + 根级 23 |
| 质量目标 |
全量用例全绿、覆盖 SRS 与用户场景(含异常流)、浏览器双节点可复现、结果变更即提交并通知研发 |
| 风险点 |
① 后端红 35(存量 16 + GrowthPublic 5E + 契约预期 RED S-cfc-168 7 + S-cfc-178 4 + TaskReview 2F 装置)· ② CI 排除清单漏拦 7 类 + 陈旧 26 类(B-152-1/2 第 16 轮)· ③ langgraph 上游 LLM 不可达(红 2)· ④ 根级 16 红(9082 未起)· ⑤ 后端全量耗时劣化至 >2h(B-184-1) |
| 待核实项 |
nutrition_age_dosage DDL 缺陷修复状态(B-156-1 第 9 轮未修)· S-cfc-168/178 实现排期 · 251 上游凭据有效性 · 204 节点恢复(B-95 第 40 轮)· 本轮全量截断导致「368 类全量逐例」未经本轮独立复现(以 R183 同源码结果为准,标「待下轮全量复核」) |
3.2 20 类测试覆盖矩阵(全类不省略)
| # |
测试类型 |
三态 |
证据(本轮实测) |
| 1 |
单元测试 |
✅ 已发现 |
后端 368 类 3111 例(同源码沿用 + 本轮定向 103 例);前端 42 文件 624 例(本轮实测) |
| 2 |
测试覆盖率 |
⚠️ 部分 |
管理端 Jest 覆盖率可产出(Lines ~10%);后端未开 jacoco(未授权改 pom) |
| 3 |
变异测试 |
❌ 未发现 |
全仓无 pitest/mutation 配置 |
| 4 |
集成测试 |
✅ 已发现 |
*IntegrationTest(Orchestration/GuideModule/EnergySystemFlow)本轮定向实测 3 类,红数一致 |
| 5 |
契约测试 |
✅ 已发现 |
契约类 20+;S-cfc-168 7F / S-cfc-178 4F 预期 RED 维持;TaskReviewScP11 2F(B-178-1 装置浮动) |
| 6 |
接口 API 测试 |
✅ 已发现 |
线上 API 32 例(25 过 / 7 跳 / 0 红,本轮实测 17.1s) |
| 7 |
系统/端到端 |
✅ 已发现 |
浏览器 30 例:admin 5 + fe 6 + shop 4 + health 13 + dx 2(跳)(本轮实测) |
| 8 |
验收 UAT |
⚠️ 部分 |
tests/test-cases/cross-role-e2e.md 双角色验收场景有台账;本轮无人工 UAT |
| 9 |
BDD 规格 |
⚠️ 部分 |
spec 201 份含 Given/When/Then 语义;无 cucumber 执行器 |
| 10 |
冒烟测试 |
✅ 已发现 |
api-smoke.spec.js 本轮全绿 |
| 11 |
回归测试 |
✅ 已发现 |
7 套件全量回归 + 后端红类定向复验;存量红集合 13/14 类逐项一致(零漂移) |
| 12 |
探索性测试 |
✅ 已发现 |
本轮现场探索:langgraph 红由 ConnectError 定性(非分类逻辑);后端慢类定位(455s/192s);无新缺陷 |
| 13 |
性能测试 |
⚠️ 部分 |
nonfunc-perf-compat.spec.js(7 跳中部分属性能项);压测未授权未执行;后端全量实测耗时劣化(B-184-1) |
| 14 |
可靠性测试 |
⚠️ 部分 |
上游 LLM 不可达提供弱故障注入证据(live chat 000/45s 而 health 200/3.7ms);无长稳/混沌测试 |
| 15 |
安全测试(SAST/DAST) |
⚠️ 部分 |
nonfunc-security.spec.js 全绿;匿名 6 端点 6/6 = 401(本轮实测);SAST 未授权 |
| 16 |
依赖漏洞扫描 |
❌ 未发现 |
无 npm audit/dependency-check 门禁,且属联网档未授权 |
| 17 |
兼容性测试 |
⚠️ 部分 |
Playwright frontend-mobile 移动视口 6/6(本轮实测);无多浏览器矩阵 |
| 18 |
可用性测试 |
⚠️ 部分 |
页面可渲染/导航/TabBar 断言覆盖;无真实用户可用性测试 |
| 19 |
无障碍测试 |
❌ 未发现 |
无 axe-core 等 a11y 断言 |
| 20 |
QA 流程与质量指标 |
⚠️ 部分 |
本报告 + blockers + 度量可复现;G9 锚点 20.1%(严格口径)、G11 CI 失真(第 16 轮) |
四、本轮实测明细
4.1 套件数据
| 套件 |
执行 |
通过 |
红 |
跳 |
耗时 |
判定 |
| 后端 JUnit 全量 |
76/368 类 |
— |
1 类 5E |
— |
39m(截断) |
⚠️ 本轮主动截断,不作全量结论;仅证明前 76 类执行正常、testCompile 375 源 0 错 |
| 后端 14 红类定向复验(本轮实测) |
103 |
67 |
29F+6E=35 |
1 |
04:51 |
13/14 类逐例与 R183 一致;TaskReview 1F→2F(B-178-1 装置浮动) |
| 后端全量结果(沿用 R183,同源码) |
3111 |
3073 |
34 |
4 |
33:49 |
本轮 git diff 证 src 零变更 → 沿用并显式标注 |
| 前端 Jest(本轮实测) |
624 |
609 |
3 |
12 |
133.59s |
3 全预期 RED(S-cfc-132/133 + AC-2 RED-A7 契约新增) |
| 管理端 Jest(本轮实测) |
116 |
116 |
0 |
0 |
120.9s |
全绿(17 套件) |
| langgraph@251(本轮实测) |
51 |
49 |
2 |
0 |
244.73s |
auto_tag 2 全环境(ConnectError);红 3→2 |
| 浏览器 189+本机(本轮实测) |
30 |
28 |
0 |
2 |
1.3m+1.0m |
dx 2 跳(契约仅登记不实现) |
| 线上 API 非功能层(本轮实测) |
32 |
25 |
0 |
7 |
17.1s |
契约缺口 3 例 fixme(同 R183) |
| 根级黑盒(本轮实测) |
23 |
7 |
16 |
0 |
13.98s |
全 ECONNREFUSED 9082(B-36 第 69 轮) |
| 合计(采用「后端沿用 R183」口径) |
3987 |
3907 |
55 |
25 |
— |
97.99%(剔 skip 98.61%) |
| 合计(+ §九 增量复验修正后,报告最终值) |
3987 |
3913 |
49 |
25 |
— |
98.14%(剔 skip 98.76%) |
vs R183:3906 过(97.97%)→ 本轮 3907 过(97.99%),+1 过、红 56→55。构成:langgraph 红 3→2。
口径声明(重要):后端 3111 例为「同源码沿用」,非本轮独立复现。若仅按本轮实际执行计数,全站执行例数 = 3111−103(红类定向已含于全量)+103 = 3111,但其中 3008 例未在本轮重跑。因此 G1 的 97.99% 是「本轮实测 5 套件 + 同源码沿用 1 套件」的混合口径,已在报告与 blockers 双处标注为「待下轮全量复核」。
4.2 后端红类明细(35,14 类,本轮定向实测)
| 红类 |
本轮实测 |
R183 |
一致性 |
EnergySystemFlowTest |
7 例 / 6F / 1S |
6F |
✅ 一致 |
GrowthPublicEndpointMappingTest(未入库,B-162-1) |
5 例 / 5E |
5E |
✅ 一致 |
MembershipPlanPurchaseContractTest |
7 例 / 7F(主窗)→ 1F(§10 增量复验) |
7F |
⚠️ S-cfc-176 合入后 6 例转绿,剩 1 例幂等复用未达成 |
FamilyRemoveMemberContractTest |
8 例 / 4F |
4F |
✅ 一致(S-cfc-178 预期 RED) |
DimensionRegistryMapContractTest |
7 例 / 3F |
3F |
✅ 一致(存量 P-9) |
TaskReviewScP11ContractTest |
8 例 / 2F |
1F |
⚠️ 1F→2F 装置浮动(B-178-1) |
GuideModuleIntegrationTest |
4 例 / 1E |
1E |
✅ 一致 |
OrchestrationEngineTest |
8 例 / 1F |
1F |
✅ 一致 |
OrchestrationIntegrationTest |
7 例 / 1F |
1F |
✅ 一致 |
MembershipPaySwitchTest |
6 例 / 1F |
1F |
✅ 一致 |
PaymentServiceORDRoutingTest |
3 例 / 1F |
1F |
✅ 一致 |
UserServiceWechatLoginTest |
5 例 / 1F |
1F |
✅ 一致 |
UserServiceWechatLoginContractTest |
6 例 / 1F |
1F |
✅ 一致 |
TeamProfitCronContractTest |
22 例 / 1F |
1F |
✅ 一致 |
| 合计 |
103 例 / 29F+6E / 1S = 35 红 |
34 红 |
净 +1 = TaskReview 装置浮动 |
BUILD FAILURE(预期,有红例);Total time 04:51;testCompile 375 源 0 错。
4.3 本轮全量截断取证(B-184-1 证据链)
| 证据 |
值 |
| 编译 |
主源 2121 / 测试源 375,0 编译错 |
| 完成类数 |
76 / 368(Tests run: 计数) |
| 已用时间 |
39 分钟(06:05 启动 → 06:44 截断),≈ 2 类/分钟 |
| 单类耗时 Top5 |
GuideRolePermissionTest 455.5s、FamilyControllerTest 192.3s、PaymentControllerTest 136.8s、GuideFamilyTaskControllerTest 125.9s、DimensionRegistryTreeTest 114.3s |
| 上下文开销 |
每类 @SpringBootTest 重新执行 DatabaseInitializer 全量迁移;日志 SQLSyntaxErrorException 70 行(含 Unknown column 'a.id'×2 即 B-170-1 未修、Key column 'product_id' doesn't exist×2 即 B-156-1 未修) |
| 宿主负载 |
wmic cpu loadpercentage = 100%;同窗口仅本机 1 个 surefire fork |
| 推算 |
若维持 2 类/分钟 → 全量 ≈ 184 分钟(R183 为 33:49,劣化 ≈5.4×) |
| 处置 |
主动 kill(pid 11316/11484),改「同源码沿用 + 红类定向复验」,不把截断当全量结论 |
4.4 langgraph 红例(2,较 R183 收窄 1 例)
| 例 |
归因 |
test_auto_tag.py::test_auto_tag_content_relevance |
AssertionError,上游 POST /api/v1/chat → ConnectError('All connection attempts failed') |
test_auto_tag.py::test_auto_tag_short_content |
同上;日志另见 prompt_service.py:118 加载提示词 intent_classifier 失败: All connection attempts failed |
- 同窗口 live 探针:
/health 200 / 3.7ms,/api/v1/chat 000 / 45.0s / 0B(零字节挂死),/api/v1/analyze 同源 → 服务进程活、LLM 链路不可达,判环境红(C 类),非代码回归;
- 节点 HEAD
fcbce94b3 = 本机 HEAD,窗口零 langgraph 源码;
intent 组 4 例连续 2 轮绿;auto_tag 3→2 → B-142-2 观察 7/13(需连续 2 轮 51/51 才销号)。
4.5 B-177-1 第 7 轮复现(pytest 进程不退出)
- summary 已打印
2 failed, 49 passed in 244.73s,但 bash -c 与 pytest 进程(pid 1915738 / 1915739,stat=Sl)存活 07:38 仍未退出 → echo EXIT=$rc 永不执行,日志无 EXIT= 行;
- 再次反证:「EXIT 未落盘」不是 shell 引号/MSYS 路径问题,而是被测进程挂死(R177 已更正,本轮为独立第 2 次佐证);
- 已
kill -9 清理,清理后 live /health 恢复正常(200/3.7ms)。
4.6 匿名鉴权探针(G8,本轮实测 6/6)
| 端点 |
HTTP |
body.code |
判定 |
POST /api/mind/fortune/data |
401 |
401 |
✅ |
POST /api/energy/data/current |
401 |
401 |
✅ |
POST /api/health/plan/generate |
401 |
401 |
✅ |
POST /api/growth/record/list |
401 |
401 |
✅ |
POST /api/admin/families/overview |
401 |
401 |
✅ |
POST /api/huawei-health/status |
401 |
401 |
✅ |
B-142-1(曾长期「HTTP 200 + code:400」)销号维持第 10 轮。
4.7 线上与节点探活
| 目标 |
结果 |
判定 |
GET /admin |
200 |
✅ |
GET /frontend |
200 |
✅ |
GET / |
404 |
⚠️ B-141-3(与 R183 一致) |
POST /api/health/data-sources/bridge/list |
404 |
⚠️ B-DX-1 第 27 轮(契约登记未实现,skip 正确) |
POST /api/health/data-sources/bridge/sync-status |
404 |
⚠️ 同上 |
251:4096 |
200 |
✅ G10 |
189:4090 |
200 |
✅ G10 |
204:4090 |
000 |
⚠️ B-95 第 40 轮 |
五、五要素问题清单
问题 1:B-184-1(P1,本轮新)后端全量耗时劣化,全量巡检已不可在窗口内完成
- 问题描述:同源码下,R183 全量
368 类 / 3111 例 / 33:49;本轮同命令 mvn -o -B clean test 在 39 分钟只完成 76 类(≈2 类/分钟),推算全量 ≈184 分钟(5.4×)。慢类 Top5 合计 1025 秒(GuideRolePermissionTest 455.5s 单类即占 11 分钟)。
- 测试 bug 点:
cfc-backend/src/test/java/com/etotem/cfc/controller/GuideRolePermissionTest.java(455.5s)、.../controller/FamilyControllerTest.java(192.3s)、.../controller/PaymentControllerTest.java(136.8s)、.../controller/GuideFamilyTaskControllerTest.java(125.9s)、.../controller/DimensionRegistryTreeTest.java(114.3s);公共装置侧:src/test/resources 缺 application-test.yml,导致每类 @SpringBootTest 均新建上下文并重跑 DatabaseInitializer 全量迁移。
- 最优修改方案:① 为慢类抽公共基类 +
@MockBean 收敛非必要 Bean,或把 @SpringBootTest 降级为 @WebMvcTest/standalone MockMvc(这 5 类均只测 controller 层);② 新增 src/test/resources/application-test.yml(H2/测试库 + spring.datasource.hikari.maximum-pool-size=4)统一夹具,抑制上下文重建与迁移;③ 修复 B-170-1/B-156-1 两条迁移语法错(每条失败会重试 + 打日志);④ 慢类加 @Timeout 与 surefire forkedProcessTimeoutInSeconds。
- 修改目的:使全量回归重新回到 ≤50 分钟窗口(G13/B-173-3 目标),恢复「每轮可全量实测」的能力,避免出现本轮这种「只能截断 + 沿用」的取证降级。
- 能否闭环:能。复测:修复后连跑 2 轮
mvn -o -B clean test,总时长 ≤50min 且类/例数与 368/3111 一致,即销号。
问题 2:B-152-1/2(P0/P1,第 16 轮)CI 排除清单双向失真
- 问题描述:
.gitlab-ci.yml 的 BACKEND_OBSERVED_CLASSES 共 33 类,与本轮实测 14 红类做双向差集:漏拦 7 类(GrowthPublicEndpointMappingTest、MembershipPlanPurchaseContractTest、FamilyRemoveMemberContractTest、TaskReviewScP11ContractTest、UserServiceWechatLoginTest、UserServiceWechatLoginContractTest、TeamProfitCronContractTest)、陈旧 26 类(已连续多轮全绿仍被排除)→ backend-blocking-junit 必然失败,同时硬门禁覆盖面被人为缩小 26 类。
- 测试 bug 点:
.gitlab-ci.yml:61 BACKEND_OBSERVED_CLASSES 字符串(清单与实测快照脱节)。
- 最优修改方案:以本轮 14 红类为权威快照重建清单(删 26 陈旧 + 加 7 漏拦),并在 CI 增加「清单 ↔ surefire 实测红类」自动差集校验任务,任何一侧漂移即报警。
- 修改目的:恢复 CI 门禁可信度(G11),使「红 = 真红」可被自动拦截,杜绝「CI 绿但线上红 / CI 红但与本轮无关」的双向虚化。
- 能否闭环:能。复测:重建后 CI 跑全量,漏拦 0 + 陈旧 0 且
backend-blocking-junit 结果与实测红类完全一致。
问题 3:B-142-2(P0,观察 7/13)langgraph 上游 LLM 不可达
- 问题描述:251 节点
/health 200(3.7ms),但 POST /api/v1/chat 000 / 45s 零字节、analyze 同源;pytest 侧 2 failed / 49 passed,两例均因 ConnectError('All connection attempts failed')。红由 3 收窄至 2,但离销号线(连续 2 轮 51/51)仍远。
- 测试 bug 点:
cfc-langgraph/tests/test_auto_tag.py::test_auto_tag_content_relevance、::test_auto_tag_short_content。
- 最优修改方案:① 修复 251 节点 LLM 上游可达性(代理/域名/凭据任一环节)并加健康探针(
/health 之外增加 /health/llm 真实打点上探);② 对 LLM 依赖用例引入「上游不可达 → skip 并打 ENV_RED 标记」机制,避免把环境故障计入用例红;③ 上游恢复后连续 2 轮 51/51 销号。
- 修改目的:消除 AI 五能力(对话/问卷/画像/推荐/解析)的整域环境红,使 langgraph 51 例可作为可信回归网;同时让「环境红」与「代码红」在报告层可分离。
- 能否闭环:能。复测:连续 2 轮 251 实派 51/51 且
EXIT=0。
问题 4:B-177-1(P1,第 7 轮复现)pytest 打印 summary 后进程不退出
- 问题描述:
2 failed, 49 passed in 244.73s 已打印,但 pid 1915739 stat=Sl 存活 7 分 38 秒仍未退出,echo EXIT=$rc 永不执行 → 日志无 EXIT= 行。任何以退出码判定的 CI 步骤会挂到超时被杀。
- 测试 bug 点:
cfc-langgraph pytest 收尾(线索:RuntimeWarning: coroutine 'JavaClient._get_client' was never awaited);派发器 docs/tdd/tools/dispatch_251_pytest.cjs:49。
- 最优修改方案:① 产品侧在 shutdown 钩子
await client.aclose(),或用 httpx.AsyncClient 的 async with;② 派发器 kick 串统一加 timeout -k 10 900,并在 timeout 后单独落盘 EXIT=124;③ CI 以「summary 行存在 + 进程已退出」双条件判定。
- 修改目的:使 langgraph 套件可被 CI 自动执行而不挂死,同时让退出码成为可信信号(而非长期噪声)。
- 能否闭环:能。复测:kick 后
ps 无残留且日志含 EXIT=0。
问题 5:B-156-1(P1,第 9 轮)nutrition_age_dosage DDL 与实体三重不一致
- 问题描述:
schema.sql:5345-5357 建表含 INDEX idx_product (product_id),但该表无 product_id 列 → 每轮上下文启动均抛 SQLSyntaxErrorException: Key column 'product_id' doesn't exist in table(本轮 2 次),DatabaseInitializer catch 后仍打「数据表检查完成」→ 表从未创建成功;实体 NutritionAgeDosage.java:33-34 另有 updateTime 而 DDL 无 update_time 列(建表修好后仍会 Unknown column)。
- 测试 bug 点:
cfc-backend/src/main/resources/schema.sql:5345(DX 缺陷在 DDL 而非用例;当前无任何用例断言该表存在,属覆盖缺口)。
- 最优修改方案:① DDL 补
product_id BIGINT NOT NULL 列(或删 idx_product 索引,二选一,按产品语义定);② 补 update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;③ 补 1 条「关键业务表存在性契约测试」(information_schema.tables 断言 nutrition_age_dosage/nutrition_ul_limit 等存在),把「建表静默失败」变成可拦截红例。
- 修改目的:消除「DDL 恒失败但无人知晓」的静默缺陷面,并把
DatabaseInitializer 的 swallow 行为纳入测试守护。
- 能否闭环:能。复测:全量日志
Key column 'product_id' doesn't exist 出现 0 次 + 新增表存在性契约测试全绿。
问题 6:B-170-1(P2,第 6 轮)activities.approved_count 迁移语句语法非法
- 问题描述:
DatabaseInitializer.java:2261 的 UPDATE activities a SET a.approved_count = (SELECT … WHERE r.activity_id = a.id …) 在 MySQL 非法(SET a.col 带别名 + 派生表引用被更新表别名)→ 本轮 2 次 Unknown column 'a.id' in 'where clause',该列唯一写入点即此语句 → 持久化列恒 0(消费侧 ActivityRegistrationService:327 走动态计算,故前端暂不受影响)。
- 测试 bug 点:
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java:2261(产品侧 SQL 缺陷,无用例守护)。
- 最优修改方案:改写为
UPDATE activities SET approved_count = (SELECT COUNT(*) FROM activity_registrations r WHERE r.activity_id = activities.id AND r.status='approved')(去掉别名引用),并补 1 条「审批后 approved_count 与 activity_registrations 计数一致」的集成断言。
- 修改目的:消除持久化列恒 0 的一致性缺陷,避免未来消费侧切到该列时出现统计数据错误。
- 能否闭环:能。复测:日志无
Unknown column 'a.id' + 新增一致性断言全绿。
问题 7:S-cfc-176 幂等复用分支未生效(P1,增量复验新发现,唯一剩余会员购买红例)
- 问题描述:
ca56f8699 实现 membership.plan.purchase 后,契约 7 例中 6 例转绿,剩 repeatPurchase_pendingOrderSamePlan_reuseNoDuplicate 仍红:同 plan 重复购买时用例期望复用既有 pending 订单、不再 insert 新单,实际 paymentOrderMapper.insert(...) 被调用(NeverWantedButInvoked)。
- 测试 bug 点:
cfc-backend/src/test/java/com/etotem/cfc/unit/MembershipPlanPurchaseContractTest.java:201(repeatPurchase_pendingOrderSamePlan_reuseNoDuplicate)。
- 最优修改方案:在
MembershipService.createOrder(或 purchasePlan 入口)中,先按 (familyId, planId, status=PENDING) 调 findReusablePendingOrder,命中则直接返回该订单 DTO 并跳过 paymentOrderMapper.insert;仅在未命中时新建。注意与 toOrderDTO 的字段口径保持一致(复用路径不得刷新 createTime/amount)。
- 修改目的:消除「重复点击购买 → 多张 pending 单 → 重复扣款/对账困难」的资损面,使 S-cfc-168 从「部分闭环」走到 GREEN。
- 能否闭环:能。复测:
mvn -o -B test -Dtest=MembershipPlanPurchaseContractTest 7/7 全绿即销号。
六、覆盖缺口清单(8 项)
| # |
缺口 |
类型 |
现状 |
风险 |
建议测试设计 |
优先级 |
闭环方式 |
| 1 |
后端全量本轮未跑完 |
G1/G2 |
76/368 类截断,改用同源码沿用 |
「368 类逐例」未经本轮独立复现 |
先解 B-184-1 再全量 |
P0 |
耗时 ≤50min 后连跑 2 轮全量 |
| 2 |
langgraph 上游不可达 |
G7 |
红 2(3→2),live chat 000/45s |
AI 五能力无法验收 |
换凭据 + /health/llm 真实探针 |
P0 |
B-142-2 连续 2 轮 51/51 |
| 3 |
CI 清单双向失真 |
G11 |
漏拦 7 / 陈旧 26(第 16 轮) |
门禁必红且覆盖虚化 |
14 红类快照重建 + 自动差集校验 |
P0 |
漏拦 0 + 陈旧 0 |
| 4 |
契约预期 RED(S-cfc-176 幂等 1 + S-cfc-178 4) |
G2/G3 |
7+4 → 1+4(增量复验后 6 例转绿) |
会员购买幂等分支 / 移除成员缓存重算仍空窗 |
研发补齐后定向复跑 |
P1 |
7/7 + 4/4 转绿 |
| 5 |
pytest 进程不退出 |
G7/CI |
第 7 轮复现,存活 7m38s |
CI 挂死 |
await client.aclose() + timeout -k |
P1 |
残留 0 + EXIT=0 |
| 6 |
根级黑盒环境红 |
G2 |
16 红全 ECONNREFUSED 9082 |
黑盒盲区 |
指向线上或本地起 9082 |
P2 |
非 5xx 全绿 |
| 7 |
关键表存在性无断言 |
G2 |
B-156-1 表从未建成却无人拦 |
静默 schema 缺陷 |
information_schema 表存在性契约 |
P1 |
新增用例全绿 |
| 8 |
变异/依赖漏洞/SAST |
G16 |
无工具/未授权 |
漏洞面未知 |
CI 离线缓存 NVD + pitest |
P1 |
工具链落地 |
七、执行档与授权(双档)
- review 档(本轮执行):离线白名单命令——
mvn -o -B clean test(截断)+ 14 红类 -Dtest= 定向(04:51)、两套 Jest、Playwright 浏览器(内网 cfc.iwintrue.com,189/本机已授权)、线上 API 点名 4 文件、匿名鉴权探针、节点探活。
- execute 档(本轮无):SCA 依赖漏洞扫描、性能压测、DAST/渗透——未授权未执行,降级为「测试设计 + 缺口诊断」,不写成已测。
- SRS/需求档(本轮零命中):specs 201 / test-cases 16 / user-scenarios 11 /
API_REFERENCE.md 窗口零变更 → 用例零新增(G12 ✅)。
7.1 度量口径(B-124/B-32 仍未闭环,双口径并列)
| 指标 |
本轮值 |
口径说明 |
| 用例台账 |
表行 876 / 唯一 TC 308 |
tests/test-cases/*.md 表格行 vs TC-<域>-<...>-<NN> 去重 |
| 用户场景 |
唯一 SC 152 |
docs/superpowers/specs/*.md 显式编号 |
| 场景→用例映射 |
88 / 152 = 57.9% |
台账中显式引用 SC 编号 |
| 可执行锚点 |
100 |
排除 tests/e2e/api/generated(253 条脚本化虚高) |
| 双向命中 / 孤儿 / 空转 |
62 / 38 / 246 |
台账∩锚点 / 有执行无台账 / 有台账无锚点 |
| G9 可执行锚点覆盖率 |
20.1%(62/308) |
严格口径;宽口径(含 generated)277/315 不作门禁 |
八、门禁结论(Verdict)
结论:⛔ 不通过(承袭;但 G1 由 ❌ 转 ✅——增量复验后通过率 98.14%)
| 门禁 |
结果 |
依据 |
| G1 通过率 |
✅ |
98.14%(3913/3987;剔 skip 98.76%)≥ 98%;注:后端为「同源码沿用 + 增量复验」混合口径,标「待下轮全量复核」 |
| G2 红例 |
❌ |
49(后端 28 + 根级 16 + langgraph 2 + 前端 3 预期 RED) |
| G3 前端 |
⚠️ |
624 口径(609/3/12),3 红全预期 RED(S-cfc-132/133 + AC-2 RED-A7) |
| G4 管理端 |
✅ |
116/116(17 套件,120.9s) |
| G5 编译/完整性 |
✅ |
主源 2121 + 测试源 375 0 编译错;定向复验 BUILD FAILURE 为预期 |
| G6 浏览器 |
✅ |
28/28 + 2 跳(189 admin 5/5 EXIT=0;本机 fe 6 / shop 4 / health 13;dx 2 跳) |
| G7 langgraph |
❌ |
49/51 = 96.1%(红 2,全环境) |
| G8 鉴权 |
✅ |
匿名 6 端点 6/6 = 401 |
| G9 覆盖锚点 |
❌ |
20.1%(62/308 严格口径) |
| G10 双节点 |
✅ |
251(51 例)+ 189(5/5,spec blob 一致) |
| G11 CI 门禁 |
❌ |
漏拦 7 / 陈旧 26(第 16 轮) |
| G12 SRS 合规 |
✅ |
主窗零变更;窗口末 API_REFERENCE.md 随 ca56f8699 新增 §4.50.1 → 已核对「文档↔用例」一致(契约先于实现落地),用例零新增,见 §10.4 |
| G13 零漂移 |
⚠️ |
13/14 红类逐例一致;TaskReview 1F→2F(B-178-1 装置浮动,非产品回归) |
| G14 场景映射 |
❌ |
57.9%(88/152) |
| G16 安全工具链 |
❌ |
无 SCA/SAST(未授权未执行) |
变化摘要(vs R183):
- 正向(含增量复验):S-cfc-176 合入使会员购买契约 7F→1F(6 例转绿) → 后端红 34→28、全站通过率 97.97%→98.14%(+0.17pct)、G1 转 ✅;langgraph 红 3→2;红类定向复验逐例可复现(13/14 类完全一致)。
- 负向(新):B-184-1 后端全量耗时劣化至 >2h(R183 33:49),迫使本轮降级为「截断 + 沿用」,全量巡检能力受损——这是本轮最重要的问题。
- 持平:浏览器 / 两套 Jest / 线上 API / 根级 / 匿名鉴权 / 站点可达性逐项与 R183 一致;B-156-1、B-170-1、B-152-1/2 仍未修(第 9 / 6 / 16 轮);S-cfc-178 仍 4F。
复评转「通过」条件:
- B-184-1 修复 → 全量 ≤50min 且连跑 2 轮 368 类/3111 例一致(恢复每轮可全量);
- S-cfc-176 幂等分支补齐 →
MembershipPlanPurchaseContractTest 7/7 绿(当前 6/7,剩 repeatPurchase_pendingOrderSamePlan_reuseNoDuplicate,见问题 7);
- S-cfc-178 实现 →
FamilyRemoveMemberContractTest 4/4 绿;
- 251 上游恢复 → langgraph 连续 2 轮 51/51(B-142-2 销号)+ B-177-1
EXIT=0;
- CI 以 14 红类快照重建双向差集(B-152-1/2)→ 漏拦 0 + 陈旧 0;
- 根级黑盒改指向(B-36)+ 授权执行 SCA/压测/SAST 且零高危。
九、增量复验(窗口末功能合入后的补测,本报告最终结论以此为准)
10.1 触发
本轮主体跑测基于 fcbce94b3(=R183 实测基线,零源码变更)。收尾推送前 git fetch 发现远端前进 8 提交,其中 ca56f8699 为真实功能提交(非 docs/构建元数据):
ca56f8699 feat(membership): implement membership.plan.purchase (S-cfc-176)
- MembershipService: purchasePlan + fail-fast no-family guard
- MembershipService: findReusablePendingOrder / toOrderDTO(createOrder 幂等辅助)
- MembershipService: markMembershipOrderFailed(幂等) + rollbackOrderToPending
- MembershipController: POST /api/membership/plan/purchase
- docs: API_REFERENCE §4.50.1 + PROJECT-OVERVIEW
按 R156 教训「跑测窗口内合入的功能变更必须单独处置(rebase → 增量复验 → 按变更补用例)」执行:pull --rebase --autostash 至 HEAD=6d3564510,再定向复跑相关契约。
10.2 复验结果
| 契约类 |
主窗(fcbce94b3) |
增量(6d3564510) |
判定 |
MembershipPlanPurchaseContractTest |
7F / 7 |
1F / 7(6 例转绿) |
✅ 大幅改善,S-cfc-168 由「未实现」→「部分闭环」 |
FamilyRemoveMemberContractTest |
4F / 8 |
4F / 8(持平) |
⚠️ S-cfc-178 仍未实现 |
- 命令:
mvn -o -B test -Dtest='MembershipPlanPurchaseContractTest,FamilyRemoveMemberContractTest' → Total time 03:17,EXIT=1(有红例);
- 剩余 1 红:
repeatPurchase_pendingOrderSamePlan_reuseNoDuplicate:201 → org.mockito.exceptions.verification.NeverWantedButInvoked: paymentOrderMapper.insert(<any PaymentOrder>),即同 plan 重复购买时应复用 pending 订单、不得再 insert 新单,实现里 findReusablePendingOrder 未在该分支生效;
- 日志另见
会员开通失败: 家庭无归属用户, familyId=5, orderNo=MO_PLAN_001 + 会员开通失败,已回滚为待支付 → 新实现的 fail-fast 与回滚链路已在跑,行为符合预期。
10.3 结论修正
| 指标 |
主窗 |
修正后(最终) |
| 后端红 |
34 |
28 |
| 全站红 |
55 |
49 |
| 全站通过 |
3907 |
3913 |
| 通过率 |
97.99% |
98.14%(剔 skip 98.76%) |
| G1 门禁 |
❌ |
✅(≥98%) |
10.4 SRS 闸门修正(G12)
- 窗口内
docs/superpowers/api/API_REFERENCE.md 有变更(新增 §4.50.1 POST /api/membership/plan/purchase)——此为「接口文档随实现同步」,非新增需求;
- 对应契约用例(
MembershipPlanPurchaseContractTest 7 例)在实现前已契约先行落地,故 无需新增用例,但按纪律已核对「文档 → 用例」一致性:文档 §4.50.1 的五参方法 + 端点与用例断言逐项对应 → G12 仍 ✅(变更已核对、用例已覆盖);
- 未因该变更触发用例编写闸门(用例数 0 新增)。
十、下轮前置
测试侧
- 优先复核 B-184-1:若研发未改慢类/夹具,下轮改用「分批全量(
-Dtest 按包切片)+ 汇总」策略,保证每轮都能拿到全量逐例结论,不再截断;
- 跟踪 S-cfc-168/178 实现进度,落地即定向复跑;
- 补「关键业务表存在性契约测试」,把 B-156-1 类静默 DDL 缺陷纳入守护;
- 把 G9 双口径写死在本报告 §7.1,下轮沿用同一口径,避免与历史 13.4%/72.1% 混淆。
研发侧(按 P 级排序)
- P0 B-184-1:5 个慢类降级
@WebMvcTest/standalone + application-test.yml 夹具 + 修 B-170-1/B-156-1 迁移语法错;
- P0 B-152-1/2:CI
BACKEND_OBSERVED_CLASSES 按 14 红类快照重建(漏拦 7 + 陈旧 26);
- P0 B-142-2:251 LLM 上游可达性 + 凭据;
- P1 B-177-1:pytest 收尾
await client.aclose();
- P1 B-156-1 / B-170-1:DDL 与迁移语句修正;
- P1 B-162-1:3 个未入库测试文件(
GrowthPublicEndpointMappingTest 等)入库,否则 CI 不可见。
附录 A:本轮命令
# 基线
git fetch origin cfclub && git pull --rebase --autostash origin cfclub # -> fcbce94b3
git diff --name-only 58671aa7a..HEAD | grep -vE '^(docs/|cfc-web/)' # 空 => 零源码变更
# 环境探针(SOP 前置)
/d/jdk1.8.0_25/bin/java -version && /d/maven/apache-maven-3.6.1/bin/mvn -v
# 后端全量(截断于 76/368 类,39min)
cd cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 mvn -o -B clean test > ../_r184_backend.log 2>&1
# 后端 14 红类定向复验(103 例 / 29F+6E / 1S / 04:51)
mvn -o -B test -DfailIfNoTests=false -Dtest='EnergySystemFlowTest,GrowthPublicEndpointMappingTest,MembershipPlanPurchaseContractTest,FamilyRemoveMemberContractTest,DimensionRegistryMapContractTest,TaskReviewScP11ContractTest,GuideModuleIntegrationTest,OrchestrationEngineTest,OrchestrationIntegrationTest,MembershipPaySwitchTest,PaymentServiceORDRoutingTest,UserServiceWechatLoginTest,UserServiceWechatLoginContractTest,TeamProfitCronContractTest'
# Jest
cd cfc-web && npx jest --silent # 116/116
cd cfc-frontend && npx jest --silent # 624: 609/3/12
cd tests && npx jest --silent # 23: 7/16
# 浏览器(每节点单任务,串行)
cd tests && npx playwright test -c playwright.config.live.js --project=frontend-mobile --workers=1 # 6/6
cd tests && npx playwright test -c playwright.config.live.js --project=shop-api --project=dx-bridge --workers=1 # 4 + 2 跳
cd tests && npx playwright test -c playwright.config.health.js --workers=1 # 13/13
node docs/tdd/tools/dispatch_189_admin.cjs # 189: 5/5 EXIT=0
# langgraph@251
node docs/tdd/tools/dispatch_251_pytest.cjs kick && node docs/tdd/tools/dispatch_251_pytest.cjs read
# 线上 API(点名 4 文件,避免 990 例误跑)
cd tests && npx playwright test -c playwright.config.api.js --workers=1 \
e2e/api/api-smoke.spec.js e2e/api/nonfunc-security.spec.js \
e2e/api/nonfunc-perf-compat.spec.js e2e/api/traceability-p94-p95-c26.spec.js
附录 B:本轮取证产物
| 文件 |
内容 |
_r184_backend.log |
截断全量日志(76 类 / 1 红类 / 编译 0 错 / SQL 异常分类) |
_r184_red_classes.log |
14 红类定向复验(103 例 / 29F+6E / 1S / BUILD FAILURE / 04:51) |
/tmp/r150_pytest.log(251) |
langgraph 51 例(2 failed / 49 passed / 244.73s,无 EXIT= 行) |