测试负责人工作汇报(R185 轮)
本汇报按《测试负责人工作汇报模板》填写。R185 为定向复验轮:基线 cfclub @ 58ee58114(=origin,07:14 fetch 核验;R184 增量复验修正已含 ca56f8699 membership 实现)。窗口内(R184 推送后)零提交、零源码变更,与 R184 最终实测基线 58ee58114 做 git diff 核验:src 变更 = 0。
本轮后端全量跑测按「先探速再决定」执行:08:16 启动 mvn -o -B clean test,实测 8 分钟仅完成 13 类(≈1.6 类/分钟,比 R184 的 2 类/分钟更慢) → B-184-1 持续(第 2 轮,宿主 CPU 已降至 40% 仍无改善,证结构性根因)→ 按纪律主动截断,改「同源码全量结果沿用 R184 增量后最终值 + 本轮 14 红类定向实测复验」双证,口径与本轮实测逐类对齐。
★ 结果变化:全站 3987 例 / 3907 过 = 97.99%(剔 skip 98.61%),环比 -6 过(langgraph 环境红 +5、TaskReview 装置浮动 +1)——G1 回落 ❌(97.99% 略低于 98% 线),详见 §八。
基本信息
| 项目 |
内容 |
| 汇报人 |
测试负责人(自动化测试闭环任务 / 软件测试专家团·陆谨) |
| 汇报周期 |
2026年11月13日 07:14 ~ 07:45(第 185 轮) |
| 基线 |
cfclub @ 58ee58114(=origin,07:14 fetch 核验) |
| 窗口内需求变更 |
零 — SRS/场景/接口文档零变更(G12 ✅,用例零新增) |
| 窗口内源码变更 |
零 — 6d3564510..58ee58114 仅 docs(R184 汇报自身),src 命中 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(同源码沿用 R184 最终值 + 本轮 103 例红类定向复验)+ 前端 Jest 624 + 管理端 116 + langgraph 51(本轮实测)+ 浏览器 30(28 过 + 2 跳,本轮实测)+ 线上 API 32(25 过 + 7 跳,本轮实测)+ 根级 23(本轮实测) |
| 用例通过率 |
97.99%(3907/3987;剔除 skip 98.61%) |
红 55 / 跳 25,环比 -6 过,明细见 §四 |
| 用例台账 |
tests/test-cases/ 16 份 / 表行 876 / 唯一 TC 308 |
场景 152 / 可执行锚点 100(排除 generated 253 条脚本化);与 R184 口径一致 |
1.2 会话与任务分发
| 指标 |
数量 |
填写说明 |
| 分派任务数* |
3 个 |
R185-1 → opencode-189(admin-desktop 5/5 EXIT=0,1.2m);R185-2 → opencode-251(langgraph pytest 44/51,114.21s + 收尾清理);R185-3 → 本机串行(fe/shop/health/dx 浏览器 + 2 套 Jest + 线上 API + 根级 + 后端全量探速截断 + 红类定向复验) |
| 恢复智能体会话数* |
0 个 |
189/251 均首派成功 |
| 当前在用会话数 |
0 个 |
全部结束;251 pytest 残留进程已 kill(B-177-1 第 8 轮复现,见 §4.5) |
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;spec blob 4703d73fb = 本机(跨节点可比) |
opencode-251 |
192.168.16.251:4096 |
done |
langgraph pytest 51 例 |
已完成(114.21s)+ 清理 |
/sc-data/cfc/cfc-langgraph |
44 过 / 7 红;红 2→7;残留 pid 已 kill |
local-browser |
本机进程 |
done |
fe / shop / health / dx |
已完成 |
d:\cfc\tests |
fe 6/6(54.2s)、shop 4/4、health 13/13(7.4s)、dx 2 跳 |
local-api |
本机进程 |
done |
线上 API 冒烟/安全/性能兼容/追溯 |
已完成(38.2s) |
d:\cfc\tests |
25 过 / 7 跳 / 0 红(点名 4 文件) |
local-jest |
本机进程 |
done |
cfc-web + cfc-frontend + 根级 |
已完成 |
cfc-web / cfc-frontend / tests |
web 116/116(18.4s)、fe 609/3/12(19.4s)、根级 7/16(3.9s) |
local-backend |
本机进程 |
done(截断 + 定向) |
全量探速 → 截断于 13 类 → 14 红类定向复验 |
全量 8m 后截断;定向 04:51 内 |
d:\cfc\cfc-backend |
全量 13 类 / 0 红类;定向 103 例 / 23F+6E / 1 跳 |
1.3 问题处置
| 指标 |
数量 |
填写说明 |
| 新测试发现问题数* |
0 个 |
无新 B-#;B-184-1 持续、B-142-2 恶化(环境红)均为承袭项 |
| 已解决测试相关问题数* |
0 个 |
各承袭项未见修复;langgraph 红 2→7(恶化,环境红形随配额漂移) |
| 待解决测试相关问题数 |
P0×2 / P1×6 / P2×4 |
① B-142-2 langgraph 上游 LLM 不可达(P0,第 15 轮,本轮恶化红 2→7:401 ****ab12 + 429 免费配额耗尽双因齐发);② B-152-1/2 CI 清单双向失真(P0/P1,第 17 轮,漏拦 7 / 陈旧 26);③ B-184-1 全量耗时劣化 >2.5h(P1,第 2 轮);④ B-156-1 nutrition_age_dosage DDL 缺陷(P1,第 10 轮);⑤ B-162-1 3 类未入库测试(P1);⑥ S-cfc-176 幂等分支 1 例未闭环(P1,第 2 轮);⑦ S-cfc-178 契约预期 RED 4 例(P1);⑧ B-177-1 pytest 进程不退出(P1,第 8 轮复现);⑨ B-173-1 safe-delete 守卫(P2);⑩ B-178-1 反射装置浮动(P2,本轮维持 2F);⑪ B-95 204 节点失联(P2,第 41 轮);⑫ B-170-1 activities.approved_count 迁移语法错(P2,第 7 轮) |
1.4 本轮 git 提交与推送证据(真理证据)
| 提交 sha |
关联任务/能力键 |
阶段 |
触及文件类型 |
目标分支 |
已推送远端 |
备注 |
| (收尾)R185 commit |
全站巡检 R185 |
汇报 |
报告 + 运行台账 + blockers + 研发通知 |
cfclub |
✅ 本轮推送 |
langgraph 环境红 2→7、G1 回落 → 提交并通知研发 |
1.5 状态机阶段分布(全局进度)
| 阶段 |
键数 |
备注 |
| UNTRACKED |
0 |
窗口零新增规格 |
| RED |
11 |
S-cfc-168 契约 1 例(幂等)+ S-cfc-178 契约 4 例 + 其他预期 RED 6 例 |
| YELLOW |
72 |
研发负责人口径 |
| GREEN |
8 |
承袭 |
| DONE |
15 |
承袭 |
| 合计 |
106 |
研发侧状态账本口径 |
1.6 数据源健康度
| 数据源 |
读取键数 |
是否正常 |
备注 |
| 需求侧(⏳ wish) |
0 |
正常 |
SRS 目标池未启用(CFC 声明配置) |
| 契约常量(contract) |
多组 |
正常 |
契约测试类跨轮核验正常 |
| 测试用例引用(test_case_map) |
308 唯一 TC |
正常 |
台账扫描正常 |
| 执行结果回填(case_results) |
— |
正常 |
侧车未重写,保留既有回写 |
二、历史审查记录(阶段 -1 记忆召回)
| 项 |
内容 |
| 上次审查 |
R184(2026-11-13 07:20,提交 58ee58114),结论「不通过(承袭;G1 转 ✅)」,最终口径全站 3987/3913(98.14%,剔 skip 98.76%),后端红 28(含 S-cfc-176 增量 -6),langgraph 49/51 红 2,14 红类定向 13/14 类逐例一致 |
| 遗留缺口 |
后端存量红 28 · langgraph 环境红 2 · 根级 16 红(9082 未起)· CI 漏拦 7/陈旧 26(B-152-1/2)· 3 未入库测试(B-162-1)· B-177-1 pytest 不退出 · B-178-1 反射装置 · B-184-1 后端全量耗时劣化 >2h(本轮持续且更慢)· S-cfc-176 幂等 1F + S-cfc-178 4F 契约预期 RED |
| 本次是否改善 |
① 恶化:langgraph 红 2→7(401+429 双因齐发,intent 4 例复红,全环境红非回归);② 恶化:B-184-1 持续(13 类/8min ≈1.6 类/min,比 R184 更慢);③ 持平:14 红类定向逐类与 R184 一致(零漂移第 21 次,TaskReview 维持 2F 装置浮动);④ 持平:浏览器/两套 Jest/根级/线上 API/匿名鉴权 6/6 全 401 逐项零漂移 |
| 教训应用 |
① 全量探速前置:本轮启动后 8 分钟即核速度,确认 1.6 类/min → 及时截断,未浪费窗口(R184 39min 才截断);② CPU 负载与速度解耦:本轮 CPU 40%(R184 100%)但速度更慢 → 证 B-184-1 根因为结构性(慢类 + 每类上下文 + 迁移错),非宿主负载;③ 251 kick 用内联命令串 + POSIX 日志路径(R173 教训),本轮日志正常落盘;④ 251 派前查残留(本轮无残留),派后清残留(pid 3402723 kill,B-177-1 第 8 轮) |
本次为该对象第 185 次审查,有历史记录;上述内容仅作对照,本次结论全部来自本轮实测 + 显式标注的同源码沿用。
三、项目画像与覆盖矩阵
3.1 项目画像(承袭并本轮核验)
| 维度 |
内容 |
| 业务定位 |
家庭教育成长平台(五维能量 身/心/智/行/富):小程序家长端 + 规划师端 + 管理后台 + 独立商城 |
| 技术栈 |
Spring Boot 2.7.18 + MyBatis-Plus + Java 8(9082)/ uni-app 微信小程序(Vue2)/ Vue2 + Element UI(8082)/ FastAPI + LangGraph + ChromaDB(9000@251) |
| 模块结构 |
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 例(同源码沿用 R184 + 本轮 14 红类 103 例定向复验)+ 前端 624 + 管理端 116 + 浏览器 30 + 线上 API 32 + langgraph 51 + 根级 23 |
| 质量目标 |
全量用例全绿、覆盖 SRS 与用户场景(含异常流)、浏览器双节点可复现、结果变更即提交并通知研发 |
| 风险点 |
① 后端红 29(承袭 28 + TaskReview 装置 +1)· ② B-184-1 全量耗时劣化持续(本轮更慢)· ③ langgraph 上游双因(401 key + 429 配额)红 7 · ④ CI 排除清单漏拦 7 + 陈旧 26(B-152-1/2 第 17 轮)· ⑤ 根级 16 红(9082 未起) |
| 待核实项 |
nutrition_age_dosage DDL 缺陷修复状态(B-156-1 第 10 轮未修)· S-cfc-176 幂等/S-cfc-178 实现排期 · 251 上游凭据与配额 · 204 节点恢复(B-95 第 41 轮)· 本轮全量截断导致「368 类全量逐例」未经本轮独立复现(以 R184 增量后同源码结果为准,标「待全量耗时修复后复核」) |
3.2 20 类测试覆盖矩阵(全类不省略)
| # |
测试类型 |
三态 |
证据(本轮实测) |
| 1 |
单元测试 |
✅ 已发现 |
后端 368 类 3111 例(同源码沿用 + 本轮定向 103 例);前端 42 文件 624 例(本轮实测) |
| 2 |
测试覆盖率 |
⚠️ 部分 |
管理端 Jest 覆盖率可产出;后端未开 jacoco(未授权改 pom) |
| 3 |
变异测试 |
❌ 未发现 |
全仓无 pitest/mutation 配置 |
| 4 |
集成测试 |
✅ 已发现 |
*IntegrationTest(GuideModule/EnergySystemFlow/Orchestration 等)本轮定向实测,红数一致 |
| 5 |
契约测试 |
✅ 已发现 |
契约类 20+;S-cfc-176 幂等 1F / S-cfc-178 4F 预期 RED 维持;TaskReviewScP11 2F(B-178-1 装置浮动) |
| 6 |
接口 API 测试 |
✅ 已发现 |
线上 API 32 例(25 过 / 7 跳 / 0 红,本轮实测 38.2s) |
| 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 套件全量回归 + 后端红类定向复验;存量红集合 14/14 类逐例一致(零漂移第 21 次) |
| 12 |
探索性测试 |
✅ 已发现 |
本轮现场探索:langgraph 红 7 全定性为 401/429 环境红;全量速度探针(1.6 类/min)证 B-184-1 结构性;无新缺陷 |
| 13 |
性能测试 |
⚠️ 部分 |
nonfunc-perf-compat.spec.js(7 跳中部分属性能项);压测未授权未执行;后端全量实测耗时劣化持续(B-184-1) |
| 14 |
可靠性测试 |
⚠️ 部分 |
上游 LLM 401/429 提供弱故障注入证据(health 200/4.4ms 而 LLM 链路降级);无长稳/混沌测试 |
| 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%(严格口径,与 R184 一致)、G11 CI 失真(第 17 轮) |
四、本轮实测明细
4.1 套件数据
| 套件 |
执行 |
通过 |
红 |
跳 |
耗时 |
判定 |
| 后端 JUnit 全量 |
13/368 类 |
— |
0 |
— |
8m(截断) |
⚠️ 本轮探速即截断(1.6 类/min,B-184-1 持续第 2 轮);前 13 类全绿,testCompile 375 源 0 错 |
| 后端 14 红类定向复验(本轮实测) |
103 |
73 |
23F+6E=29 |
1 |
≈04:51(Total time 4m 级) |
14/14 类逐例与 R184 一致(零漂移第 21 次);TaskReview 维持 2F(B-178-1 装置浮动) |
| 后端全量结果(沿用 R184 增量后,同源码) |
3111 |
3079 |
28 |
4 |
— |
本轮 git diff 证 src 零变更 → 沿用并显式标注;R184 已含 S-cfc-176 增量 -6 |
| 前端 Jest(本轮实测) |
624 |
609 |
3 |
12 |
19.4s |
3 全预期 RED(S-cfc-132/133 + AC-2 RED-A7) |
| 管理端 Jest(本轮实测) |
116 |
116 |
0 |
0 |
18.4s |
全绿(17 套件) |
| langgraph@251(本轮实测) |
51 |
44 |
7 |
0 |
114.21s |
红 2→7(恶化):auto_tag 3 + intent 4,全环境红(401 key ****ab12 + 429 免费配额耗尽) |
| 浏览器 189+本机(本轮实测) |
30 |
28 |
0 |
2 |
1.2m+1.3m |
dx 2 跳(契约仅登记不实现) |
| 线上 API 非功能层(本轮实测) |
32 |
25 |
0 |
7 |
38.2s |
契约缺口 3 例 fixme(同 R184/R183) |
| 根级黑盒(本轮实测) |
23 |
7 |
16 |
0 |
3.9s |
全 ECONNREFUSED 9082(B-36 第 70 轮) |
| 合计(采用「后端沿用 R184 增量后」口径) |
3987 |
3907 |
55 |
25 |
— |
97.99%(剔 skip 98.61%) |
vs R184(3913 过 / 98.14%):-6 过、红 49→55。构成:langgraph 红 2→7(-5 过,环境红)+ TaskReview 装置浮动 1F→2F(-1 过,非产品回归)。其余套件逐项零漂移。
口径声明(重要):后端 3111 例为「同源码沿用 R184 增量后」,非本轮独立复现。本轮实证 = 全量前 13 类 + 14 红类 103 例定向(29 红逐例与 R184 一致)。G1 的 97.99% 是「本轮实测 6 套件 + 同源码沿用 1 套件」的混合口径,且 CFC 后端全量能力因 B-184-1 尚不可用,已在 blockers 双处标注。
4.2 后端红类明细(29 红,14 类,本轮定向实测)
| 红类 |
本轮实测 |
R184 |
一致性 |
EnergySystemFlowTest |
7 例 / 6F / 1S |
6F / 1S |
✅ 一致 |
GrowthPublicEndpointMappingTest(未入库,B-162-1) |
5 例 / 5E |
5E |
✅ 一致 |
MembershipPlanPurchaseContractTest |
7 例 / 1F |
1F(增量后) |
✅ 一致(幂等分支未修,问题 7 第 2 轮) |
FamilyRemoveMemberContractTest |
8 例 / 4F |
4F |
✅ 一致(S-cfc-178 预期 RED) |
DimensionRegistryMapContractTest |
7 例 / 3F |
3F |
✅ 一致(存量 P-9) |
TaskReviewScP11ContractTest |
8 例 / 2F |
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 例 / 23F+6E / 1S = 29 红 |
29 红 |
✅ 14/14 类逐例一致(零漂移第 21 次) |
BUILD FAILURE(预期,有红例);Total time 04:51(同量级);testCompile 375 源 0 错。
口径:28 红为「R184 增量后承袭值(TaskReview 按 1F)」;本轮定向实测 29 红含 TaskReview 2F(+1 装置浮动),故全站红 55 = 后端 29 + 根级 16 + langgraph 7 + 前端 3,已在 §八 G2 如实标注。
4.3 本轮全量探速截断取证(B-184-1 第 2 轮证据链)
| 证据 |
值 |
| 编译 |
主源 2121 / 测试源 375,0 编译错 |
| 完成类数 |
13 / 368(Tests run: 计数,全部 config 包小类) |
| 已用时间 |
8 分钟(07:16 启动 → 07:26 截断),≈ 1.6 类/分钟 |
| 宿主负载 |
CPU 40%(R184 为 100%)——速度未随负载下降改善,证根因为结构性 |
| 单类 |
前 13 类均 <1s(config 小类);慢类(GuideRolePermission 455s 等)尚未轮到 |
| 推算 |
若维持 1.6 类/分钟 → 全量 ≈ 230 分钟(>2.5h),比 R184 推算的 184min 更慢 |
| 处置 |
主动 kill(pid 18124/14148),改「同源码沿用 + 红类定向复验」,不把截断当全量结论 |
| 结论 |
B-184-1 持续第 2 轮且未见缓解(结构性:慢类 @SpringBootTest 重上下文 + 缺 application-test.yml 重跑迁移 + B-170-1/B-156-1 迁移错);CPU 40% 仍 1.6 类/min 排除了「R184 高负载致慢」的单因解释 |
4.4 langgraph 红例(7,较 R184 恶化 5 例)
| 例 |
归因 |
test_auto_tag.py::test_auto_tag_valid_format |
chat 端点 500;日志 401 Authentication Fails, Your api key: ****ab12 is invalid(召回记忆/保存记忆失败)+ 429 AgnesAI free rate limit |
test_auto_tag.py::test_auto_tag_short_content |
同上(401 + 429) |
test_auto_tag.py::test_auto_tag_empty_content |
同上(429 RateLimitError 6.87s/8.43s) |
test_intent.py::test_classify_analysis |
intent_classifier.py:62 意图分类失败: 429 rate limit → 默认 chat → assert CHAT == ANALYSIS 失败 |
test_intent.py::test_classify_recommend |
同上(429 → 默认 chat) |
test_intent.py::test_classify_mind |
同上(429 → 默认 chat) |
test_intent.py::test_classify_health |
同上(429 → 默认 chat) |
- 双因齐发(较 R184 单因 ConnectError 更广):① 记忆召回/保存
401 key ****ab12 invalid → chat 500(auto_tag 3 红);② 意图分类 429 AgnesAI 免费用户每日文本配额耗尽(request id 时间戳 2026-11-12 23:18 UTC = 本日 07:18 CST)→ intent 全降级默认 chat(intent 4 红);
- 节点 HEAD
4bf5117b0(langgraph 目录零源码差异,窗口零提交);/health 200/4.4ms(服务进程活)→ 判环境红(C 类),非代码回归;
- 红例形随配额/凭据漂移(R184 为 ConnectError、R183 为 429/401)→ 印证「不要沿用上轮红例归因」;
intent 4 例曾连续 2 轮绿(R183/R184),本轮复红 → B-142-2 观察由 7/13 回落(配额耗尽窗口性,非持续)。
4.5 B-177-1 第 8 轮复现(pytest 进程不退出)
- summary 已打印
7 failed, 44 passed in 114.21s,但 bash -c(pid 3402720)与 .venv/bin/python -m pytest(pid 3402723)存活未退出 → 日志无 EXIT= 行;
- 已
kill -9 清理,清理后 251 /health 200/4.4ms 正常;ps | grep pytest = 0;
- 第 8 轮复现(R177 首发、R184 第 7 轮、本轮第 8 轮),佐证「被测进程挂死」而非 shell 引号/MSYS 路径问题。
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」)销号维持第 11 轮。
4.7 线上与节点探活
| 目标 |
结果 |
判定 |
GET /admin |
302(→登录) |
✅ |
GET /frontend |
302(→登录) |
✅ |
GET / |
404 |
⚠️ B-141-3(与 R184 一致) |
251:4096 |
200 |
✅ G10 |
189:4090 |
200 |
✅ G10 |
204:4090 |
000 |
⚠️ B-95 第 41 轮 |
| 189 spec blob |
4703d73fb |
✅ = 本机(跨节点可比) |
五、五要素问题清单
问题 1:B-184-1(P1,第 2 轮持续)后端全量耗时劣化,全量巡检不可行
- 问题描述:同源码下 R184 39min 仅 76 类(≈2 类/min);本轮 8min 仅 13 类(≈1.6 类/min),推算全量 ≈230min(>2.5h),比 R184 更慢。本轮宿主 CPU 仅 40%(R184 100%),速度不升反降 → 排除单因高负载,证结构性根因。
- 测试 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 全量迁移。
- 最优修改方案:① 慢类降
@WebMvcTest/standalone MockMvc(5 类均只测 controller 层);② 落 src/test/resources/application-test.yml(H2 + 小连接池)抑制上下文重建与迁移;③ 修 B-170-1/B-156-1 两条迁移语法错;④ 慢类加 @Timeout + surefire forkedProcessTimeoutInSeconds。
- 修改目的:恢复全量回归 ≤50min 窗口能力,避免每轮「截断 + 沿用」的取证降级。
- 能否闭环:能。复测:修复后连跑 2 轮
mvn -o -B clean test 总时长 ≤50min 且类/例数一致。
问题 2:B-152-1/2(P0/P1,第 17 轮)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 字符串(与实测快照脱节,第 17 轮未修)。
- 最优修改方案:以本轮 14 红类为权威快照重建清单(删 26 陈旧 + 加 7 漏拦),CI 增加「清单 ↔ surefire 实测红类」自动差集校验任务。
- 修改目的:恢复 CI 门禁可信度(G11),杜绝双向虚化。
- 能否闭环:能。复测:重建后漏拦 0 + 陈旧 0 且
backend-blocking-junit 与实测红类一致。
问题 3:B-142-2(P0,第 15 轮,本轮恶化红 2→7)langgraph 上游 LLM 不可达(双因)
- 问题描述:251 节点
/health 200(4.4ms),但 ① 记忆召回/保存 401 key ****ab12 invalid → chat 500;② 意图分类 429 AgnesAI 免费用户每日文本配额耗尽 → 默认 chat。pytest 44 过 / 7 红(R184 为 49/2)。红由 2 恶化至 7(intent 4 例复红 + auto_tag 3 全红),全环境红。
- 测试 bug 点:
cfc-langgraph/tests/test_auto_tag.py::test_auto_tag_{valid_format,short_content,empty_content}、tests/test_intent.py::test_classify_{analysis,recommend,mind,health}。
- 最优修改方案:① 运维轮换
****ab12 key(长期 401)+ 升级 AgnesAI 配额(每日免费额度不足);② 加 /health/llm 真实打点上探;③ 对 LLM 依赖用例引入「上游不可达 → skip + ENV_RED 标记」,把环境故障与用例红分离。
- 修改目的:消除 AI 五能力整域环境红;让「环境红」与「代码红」在报告层可分离;解除 429/401 对通过率的拖累。
- 能否闭环:能。复测:连续 2 轮 251 实派 51/51 且
EXIT=0。
问题 4:B-177-1(P1,第 8 轮复现)pytest 打印 summary 后进程不退出
- 问题描述:
7 failed, 44 passed in 114.21s 已打印,但 pid 3402723 存活未退出,echo EXIT=$rc 永不执行 → 日志无 EXIT= 行。
- 测试 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 + 单独落盘 EXIT=124;③ CI 以「summary 行存在 + 进程已退出」双条件判定。
- 修改目的:使 langgraph 套件可被 CI 自动执行而不挂死,退出码成可信信号。
- 能否闭环:能。复测:kick 后
ps 无残留且日志含 EXIT=0。
问题 5:S-cfc-176 幂等复用分支未生效(P1,第 2 轮,唯一剩余会员购买红例)
- 问题描述:
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 字段口径一致。
- 修改目的:消除「重复点击购买 → 多张 pending 单 → 重复扣款/对账困难」资损面。
- 能否闭环:能。复测:
mvn -o -B test -Dtest=MembershipPlanPurchaseContractTest 7/7 全绿即销号。
问题 6:B-156-1(P1,第 10 轮)nutrition_age_dosage DDL 与实体三重不一致
- 问题描述:
schema.sql:5345-5357 建表含 INDEX idx_product (product_id) 但无 product_id 列 → 每轮上下文启动抛 SQLSyntaxErrorException: Key column 'product_id' doesn't exist,DatabaseInitializer catch 后仍打「数据表检查完成」→ 表从未创建成功;实体 NutritionAgeDosage.java:33-34 另有 updateTime 而 DDL 无 update_time 列。
- 测试 bug 点:
cfc-backend/src/main/resources/schema.sql:5345;当前无任何用例断言该表存在(覆盖缺口)。
- 最优修改方案:① DDL 补
product_id BIGINT NOT NULL(或删 idx_product);② 补 update_time DATETIME ...;③ 补「关键业务表存在性契约测试」。
- 修改目的:消除「DDL 恒失败但无人知晓」静默缺陷面。
- 能否闭环:能。复测:全量日志无
Key column 'product_id' doesn't exist + 新增表存在性契约全绿。
问题 7:B-170-1(P2,第 7 轮)activities.approved_count 迁移语句语法非法
- 问题描述:
DatabaseInitializer.java:2261 的 UPDATE activities a SET a.approved_count = (SELECT … WHERE r.activity_id = a.id …) 在 MySQL 非法(SET a.col 带别名 + 派生表引用被更新表别名)→ 本轮 Unknown column 'a.id' in 'where clause',该列唯一写入点即此语句 → 持久化列恒 0。
- 测试 bug 点:
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java:2261。
- 最优修改方案:改写为
UPDATE activities SET approved_count = (SELECT COUNT(*) FROM activity_registrations r WHERE r.activity_id = activities.id AND r.status='approved'),补「审批后计数一致」集成断言。
- 修改目的:消除持久化列恒 0 一致性缺陷。
- 能否闭环:能。复测:日志无
Unknown column 'a.id' + 新增断言全绿。
六、覆盖缺口清单(8 项)
| # |
缺口 |
类型 |
现状 |
风险 |
建议测试设计 |
优先级 |
闭环方式 |
| 1 |
后端全量本轮未跑完 |
G1/G2 |
13/368 类探速即截断,改用同源码沿用 |
「368 类逐例」未经本轮独立复现 |
先解 B-184-1 再全量 |
P0 |
耗时 ≤50min 后连跑 2 轮全量 |
| 2 |
langgraph 上游不可达(双因) |
G7 |
红 2→7(401 key + 429 配额) |
AI 五能力无法验收 |
轮换凭据 + 升级配额 + /health/llm 探针 |
P0 |
B-142-2 连续 2 轮 51/51 |
| 3 |
CI 清单双向失真 |
G11 |
漏拦 7 / 陈旧 26(第 17 轮) |
门禁必红且覆盖虚化 |
14 红类快照重建 + 自动差集校验 |
P0 |
漏拦 0 + 陈旧 0 |
| 4 |
契约预期 RED(S-cfc-176 幂等 1 + S-cfc-178 4) |
G2/G3 |
1 + 4 维持 |
会员购买幂等分支 / 移除成员缓存重算仍空窗 |
研发补齐后定向复跑 |
P1 |
7/7 + 4/4 转绿 |
| 5 |
pytest 进程不退出 |
G7/CI |
第 8 轮复现 |
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= 定向、两套 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 仍未闭环,双口径并列,与 R184 一致)
| 指标 |
本轮值 |
口径说明 |
| 用例台账 |
表行 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 由 ✅ 回落 ❌——langgraph 环境红恶化使通过率跌破 98% 线)
| 门禁 |
结果 |
依据 |
| G1 通过率 |
❌ |
97.99%(3907/3987;剔 skip 98.61%)< 98%(差 0.01pct,全因 langgraph 环境红 +5 + TaskReview 装置 +1);注:后端为「同源码沿用 + 定向复验」混合口径 |
| G2 红例 |
❌ |
55(后端 29 + 根级 16 + langgraph 7 + 前端 3 预期 RED) |
| G3 前端 |
⚠️ |
624 口径(609/3/12),3 红全预期 RED(S-cfc-132/133 + AC-2 RED-A7) |
| G4 管理端 |
✅ |
116/116(17 套件,18.4s) |
| 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 |
❌ |
44/51 = 86.3%(红 7,全环境) |
| G8 鉴权 |
✅ |
匿名 6 端点 6/6 = 401 |
| G9 覆盖锚点 |
❌ |
20.1%(62/308 严格口径) |
| G10 双节点 |
✅ |
251(51 例)+ 189(5/5,spec blob 4703d73fb 与本机一致) |
| G11 CI 门禁 |
❌ |
漏拦 7 / 陈旧 26(第 17 轮) |
| G12 SRS 合规 |
✅ |
窗口零变更(R184 已含 §4.50.1 核对),用例零新增 |
| G13 零漂移 |
⚠️ |
14/14 红类逐例一致(零漂移第 21 次);TaskReview 维持 2F(B-178-1 装置浮动,非产品回归) |
| G14 场景映射 |
❌ |
57.9%(88/152) |
| G16 安全工具链 |
❌ |
无 SCA/SAST(未授权未执行) |
变化摘要(vs R184):
- 负向(本轮主要变化):langgraph 红 2→7(401 key
****ab12 + 429 AgnesAI 免费配额耗尽双因齐发,intent 4 例复红)→ 通过率 98.14%→97.99%(-0.15pct)、G1 由 ✅ 回落 ❌;B-184-1 持续且更慢(39min/76类→8min/13类,≈1.6 类/min)。
- 持平:14 红类定向逐例一致(零漂移第 21 次);浏览器/两套 Jest/根级/线上 API/匿名 6 端点 401 逐项零漂移;B-156-1、B-170-1、B-152-1/2、B-177-1、B-178-1 仍未修(第 10 / 7 / 17 / 8 / 5 轮);S-cfc-176 幂等 1F、S-cfc-178 4F 维持。
- 正向:无(本轮无新闭环项;189 admin 5/5 首轮即绿第 7 轮维持、匿名 401 维持第 11 轮)。
复评转「通过」条件:
- B-184-1 修复 → 全量 ≤50min 且连跑 2 轮 368 类/3111 例一致;
- B-142-2 运维处置(轮换
****ab12 + 升级 AgnesAI 配额)→ langgraph 连续 2 轮 51/51 + B-177-1 EXIT=0;
- S-cfc-176 幂等分支补齐 →
MembershipPlanPurchaseContractTest 7/7 绿;
- S-cfc-178 实现 →
FamilyRemoveMemberContractTest 4/4 绿;
- CI 以 14 红类快照重建双向差集(B-152-1/2)→ 漏拦 0 + 陈旧 0;
- 根级黑盒改指向(B-36)+ 授权执行 SCA/压测/SAST 且零高危。
九、下轮前置
测试侧
- 优先复核 B-184-1:若研发未改慢类/夹具,下轮改用「按包切片全量(-Dtest 分组)+ 汇总」策略,保证每轮拿到全量逐例结论,不再截断;同时把「探速截断」阈值写死(≥1.5 类/min 即截断,避免空耗窗口);
- 跟踪 S-cfc-176 幂等 / S-cfc-178 实现进度,落地即定向复跑;
- 251 派发前先查残留、派后必须核
EXIT= 行 + ps 残留双判据(B-177-1 第 8 轮教训);
- 下轮若 langgraph 红仍随配额漂移,在报告中单列「环境红漂移带」不与代码红混算。
研发侧(按 P 级排序)
- P0 B-142-2:轮换
****ab12 key + 升级 AgnesAI 免费配额(本轮双因齐发,比此前任何一轮更广,已阻碍 G1 达标);
- 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);
- 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 # -> 58ee58114(=origin,07:14 核验)
git diff --name-only 6d3564510..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
# 节点:189:4090=200 / 251:4096=200 / 204:4090=000;线上 admin/frontend=302、/404;CPU 40%
# 后端全量(探速即截断于 13/368 类,8min,≈1.6 类/min)
cd cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 mvn -o -B clean test > ../_r185_backend.log 2>&1
# (8min 后 kill pid 18124/14148 截断)
# 后端 14 红类定向复验(103 例 / 23F+6E / 1S / 04:51,14/14 类逐例一致)
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(18.4s)
cd cfc-frontend && npx jest --silent # 624: 609/3/12(19.4s)
cd tests && npx jest --silent # 23: 7/16(3.9s)
# 浏览器(每节点单任务,串行;统一 --output 一次性目录规避 safe-delete 守卫)
cd tests && npx playwright test -c playwright.config.live.js --project=frontend-mobile --workers=1 --output=../_r185/fe # 6/6
cd tests && npx playwright test -c playwright.config.live.js --project=shop-api --project=dx-bridge --workers=1 --output=../_r185/shop # 4 + 2 跳
cd tests && npx playwright test -c playwright.config.health.js --workers=1 --output=../_r185/health # 13/13
node docs/tdd/tools/dispatch_189_admin.cjs # 189: 5/5 EXIT=0
# langgraph@251(kick 内联命令串 + 远端 POSIX 日志路径)
node _r185_251_lg.cjs kick && node _r185_251_lg.cjs read # 44 过 / 7 红 / 114.21s;无 EXIT 行 → kill 残留 pid 3402723
# 线上 API(点名 4 文件,避免 990 例误跑)
cd tests && npx playwright test -c playwright.config.api.js --workers=1 --output=../_r185/api \
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 # 25 过 / 7 跳 / 0 红
# 匿名鉴权 6 端点(全 401)
附录 B:本轮取证产物
| 文件 |
内容 |
_r185_backend.log |
探速截断全量日志(13 类 / 0 红 / 编译 0 错 / 8min) |
_r185_red_classes.log |
14 红类定向复验(103 例 / 23F+6E / 1S / BUILD FAILURE / 04:51) |
/tmp/r185_pytest.log(251) |
langgraph 51 例(7 failed / 44 passed / 114.21s,无 EXIT= 行) |
_r185/(fe/shop/health/api) |
浏览器套件输出(一次性目录,规避 safe-delete 守卫) |