测试负责人工作汇报(R191 轮)
本汇报按《测试负责人工作汇报模板》填写。R191 为后端全量实跑轮(R189/R190 均为采信,按纪律必须实跑):基线起点 cfclub @ 309fa0220(R190 收口 12:35 之后),跑测窗口内并行会话把 HEAD 推进至 123f768c7(含 S-cfc-197 契约类),收尾经 HTTP 兜底 fetch 后快进至 5ad781a00(含 S-cfc-199 / S-cfc-200 三个契约类)。
拓扑(用户指令):浏览器经 http://cfc.iwintrue.com/admin(后台)+ http://cfc.iwintrue.com/frontend(小程序);189 / 204 / 本机为浏览器节点(每节点仅 1 个浏览器任务,本机四个套件串行);langgraph 部署 251 → 本轮已实派并实跑。
★ 本轮关键事实
① 后端恢复全量实跑:mvn -o -B clean test 1:01h → 386 类 / 3315 例 / 3232 过 / 73F+6E+4S = 97.50%(剔 skip 97.62%);386/386 XML 无沉默、2121 主源 + 392 测试源 0 编译错、dump 0。
② 窗口与收尾两次新增契约类均已逐类实测取证:本地窗口 S-cfc-197 AdminReportParserManageContractTest 37/37 GREEN + S-cfc-198 AdminKnowledgeBaseManageContractTest 13 例 6 红/7 绿(预期 RED);收尾远端推入 S-cfc-199/200 三类 52 例 39 红/13 绿(TDD 前瞻 RED)。
③ 存量红零漂移第 26 次:13 类 / 24 红,与 R190 的 13 类逐类一致(唯一 −1 例为 TaskReviewScP11ContractTest 装置浮动 2F→1F)。
④ langgraph@251 4 红全为环境:429 AgnesAI 免费额度耗尽 + 401 api key ****ab12 invalid;live /health 200/2ms 但 /api/v1/chat 000/40s、/api/v1/analyze 000/50s → B-142-2 复发 + B-186-1 延续。
⑤ 浏览器任务级全绿:本机四件套 28/28 + 跨节点 189 admin 5/5 + 204 fe 6/6(连续 2 轮,B-95 可销号);dx 2 跳承袭(B-DX-1)。
★ 全站可比:4254 例 / 4088 过 = 96.10%(剔 skip 96.67%),红 141。红数环比 +47 全部为 TDD 前瞻契约 RED(+45:S-cfc-198 6 + 远端三类 39)与上游环境红(langgraph +3),零缺陷回归;剔除全部预期 RED 后为 98.34%。
基本信息
| 项目 |
内容 |
| 汇报人 |
测试负责人(自动化测试闭环任务 / 软件测试专家团·陆谨) |
| 汇报周期 |
2026年11月13日 13:14 ~ 14:35(第 191 轮) |
| 基线 |
起点 cfclub @ 309fa0220(=origin);跑测中推进 123f768c7;收尾 ff 至 5ad781a00(13:14 → 14:35 窗口) |
| 窗口内需求变更 |
零 — docs/superpowers/specs(201 份)/ tests/test-cases(16 份)/ tests/user-scenarios(11 份)/ API_REFERENCE.md 窗口内 git diff 命中 0 → G12 ✅,未触发用例编写闸门(我无需新增/改用例) |
| 窗口内源码变更 |
零功能源码 — cfc-backend/src/main、cfc-frontend、cfc-langgraph 窗口 diff 命中 0;唯一变更为测试契约类 5 个(S-cfc-197/198/199/200)+ cfc-web 版本号 bump + docs |
| 负责模块/单元 |
全站:管理端 admin@本机 + 189 · 小程序 H5 fe@本机 + 204 · cfc-langgraph@251(实派) · cfc-backend JUnit(全量实跑 + 收尾增量复验) · cfc-web/cfc-frontend Jest · 线上 API 非功能层 |
一、本轮工作数据汇总
1.1 测试用例建设
| 指标 |
数量 |
填写说明 |
| 本轮新增测试用例数* |
0 个(由我新增);并行会话 +102 例(本地窗口 50 + 收尾远端 52) |
SRS/场景/接口文档窗口零变更 → 未触发用例编写闸门(G12 ✅);窗口内并行会话新增 5 个契约测试类(S-cfc-197 37 例 / S-cfc-198 13 例 / S-cfc-199 17 例 / S-cfc-200 16+19 例),全部本轮逐类实测取证,未出现 B-189-2 式「推入未验证」 |
| 本轮验证执行测试数* |
4254 个 |
后端 3367(全量实跑 3315 + 收尾增量 52)+ 前端 Jest 740(fe 624 + web 116)+ langgraph 51(251 实派)+ 浏览器 41(39 过 + dx 2 跳)+ 线上 API 32 + 根级 23 |
| 用例通过率 |
96.10%(4088/4254;剔除 skip 96.67%) |
红 141 / 跳 25;环比 R190(97.22%)−1.12pct,红数 +47 全为 TDD 前瞻契约 RED(+45)+ 上游环境红(langgraph +3)+ 装置浮动(−1);剔除全部预期 RED 后 98.34%,零缺陷回归 |
| 用例台账 |
tests/test-cases 16 份 / 表行 1168 / 唯一 TC 618 |
严格锚点(tests JS/TS/py 排除 generated ∪ Java 测试)153;双向命中 106 = 17.2%;孤儿锚点 47 / 台账空转 512 |
1.2 会话与任务分发
| 指标 |
数量 |
填写说明 |
| 分派任务数* |
8 个 |
R191-1 本机 admin-desktop(5/5)+ frontend-mobile(6/6)+ shop-api(4/4)+ health(13/13,串行);R191-2 189 admin-desktop(5/5);R191-3 204 frontend-mobile(6/6);R191-4 251 langgraph pytest(47/51,134.17s)+ live 三端点;R191-5 cfc-web Jest(116/116);R191-6 cfc-frontend Jest(609/3/12);R191-7 根级 Jest(7/16);R191-8 线上 API 非功能(25/0/7)+ 收尾增量 3 契约类(13/39) |
| 恢复智能体会话数* |
0 个 |
各节点实探:189:4090=200、204:4091=200、251:4096=200、251:9000=404(根)/health 200、本机 4091=OPEN;未遇中断会话 |
| 当前在用会话数 |
0 个 |
全部结束;251 残留 pytest 进程(2 个,存活 4m33s)已 kill -9 清理并 ps 复核 0 |
1.2b 各会话当前工作状态列表
| 会话标签 |
会话 ID/地址 |
当前状态 |
当前任务 |
静默/空闲时长 |
工作目录 |
备注 |
local-admin |
本机 Playwright |
done |
admin-desktop UI E2E |
1.4m |
d:\cfc\tests |
5/5;TC-A-U01~U05 全过(U05 55.3s) |
local-frontend |
本机 Playwright |
done |
frontend-mobile UI E2E |
1.9m |
d:\cfc\tests |
6/6;B-185 维持消除 |
local-shop |
本机 Playwright |
done |
shop-sort API E2E |
9.7s |
d:\cfc\tests |
4/4 |
local-health |
本机 Playwright |
done |
health 鉴权契约 E2E |
5.5s |
d:\cfc\tests |
13/13(TC-HP-U01~03 全 401) |
remote-189 |
192.168.16.189:4090 |
done |
admin-desktop UI E2E |
1.3m |
C:\code\cfc\tests |
5/5;HEAD 8524533c8,spec blob 4703d73fb=本机 → 可比 |
remote-204 |
192.168.16.204:4091 |
done |
frontend-mobile UI E2E |
44.7s |
D:\cfc\tests |
6/6(连续 2 轮)→ B-95 可销号 |
remote-251 |
192.168.16.251:4096 |
done |
langgraph pytest + live 探针 |
134.17s |
/sc-data/cfc/cfc-langgraph |
47/51;4 红全 429/401 环境;node HEAD 563e6c62d,cfc-langgraph 与本地零 diff |
local-jest |
本机进程 |
done |
cfc-web + cfc-frontend + 根级 |
web 124s / fe 66s / root 7s |
cfc-web / cfc-frontend / tests |
web 116/116、fe 609/3/12(3 预期 RED)、根级 7/16(B-36) |
local-backend |
本机 mvn |
done |
后端全量 386 类 + 收尾增量 3 类 |
1:01h + 2m43s |
d:\cfc\cfc-backend |
全量 3315(3232/79/4)+ 增量 52(13/39) |
virtual |
dx-bridge |
done |
D/X 桥接鉴权契约 |
瞬时 |
d:\cfc\tests |
2 skip(端点 404,B-DX-1 第 33 轮) |
1.3 问题处置
| 指标 |
数量 |
填写说明 |
| 新测试发现问题数* |
3 个 |
① B-191-1(P1 流程/证据):跑测窗口内远端连续推入 3 个契约类(AdminSupplierManageContractTest 16 例 10F、SupplierManageAdminContractTest 19 例 16F、DimensionConfigAdminContractTest 17 例 13F),若不做收尾 fetch + 增量复验,会把 39 例 TDD-RED 当作「未覆盖」或把后续轮次误判为回归 → 本轮已增量复验并计入;② B-191-2(P1 装置/性能):后端全量 1:01h(R188 同源码 43:15),慢类 ArticleCategoryControllerTest 493.97s、AdminFamilyOverviewControllerTest 341.2s、GrowthPublicEndpointMappingTest 334.2s、GrowthRecordSyncFlowTest 280.7s、PlannerBindInviteFlowTest 178.1s;cfc-scheduler 日志 20524/73287 = 28.0% → B-152-3 复现;③ B-191-3(P2 工具/度量):线上 API 套件首跑仅 26 例(19 过 + 7 跳)/5.4min,二次同命令 32 例(25 过 + 7 跳)/18.2s → 首跑口径不完整,报告例数须以「Running N tests + summary 例数 = 点名例数」双校验 |
| 已解决测试相关问题数* |
2 个 |
① B-95 销号(204 节点):204 fe 6/6 连续 2 轮(R190 46.1s + R191 44.7s),满足连续 2 轮判据;② S-cfc-197 GREEN 确认:AdminReportParserManageContractTest 37/37 全绿 → 能力键 admin.reportParser.manage 实现已落地,可直接转 GREEN(前提:研发侧 --mark-yellow/--mark-green 登记) |
| 待解决测试相关问题数 |
P0×2 / P1×9 / P2×4 |
① B-152-1/2 CI 清单漏拦扩至 18 / 陈旧 26;② TDD 前瞻契约 RED 94 例(12 类)待研发实现;③ 存量装置/数据红 24 例(13 类);④ B-177-1 pytest 进程不退出(第 13 轮);⑤ B-156-1/B-170-1 迁移 DDL;⑥ B-162-1 未入库测试类;⑦ B-178-1 反射装置浮动;⑧ B-36 根级 16 红(9082 未起);⑨ B-DX-1 dx 404;⑫ B-142-2 复发(429/401 上游);⑬ B-186-1 live chat/analyze 挂死;⑭ B-189-1 git SSH 22 仍故障;⑮ B-191-2 全量耗时劣化 |
1.4 本轮 git 提交与推送证据(真理证据)
| 提交 sha |
关联任务/能力键 |
阶段 |
触及文件类型 |
目标分支 |
已推送远端 |
备注 |
(本轮) |
全站巡检 R191 + 后端全量实跑 + 5 契约类补验 + B-191-1/2/3 + B-95 销号 + S-cfc-197 GREEN |
汇报 |
报告 + 执行日志 + blockers + 研发通知 + 台账 |
cfclub |
✅ 推送 http://git.iwintrue.com/liaoxg/cfc.git(SSH 22 仍故障,B-189-1 第 2 轮 HTTP 兜底) |
结果有变化 → 已提交并通知研发 |
1.5 状态机阶段分布(全局进度,研发侧账本口径)
| 阶段 |
键数 |
备注 |
| RED |
窗口新增 5 个契约类(S-cfc-197 已全绿可转 YELLOW/GREEN;S-cfc-198/199/200 为本轮 TDD-RED 前瞻) |
研发状态机口径另计(sc-key-map.md 窗口 3 次回填,241/241 全映射达成) |
| YELLOW |
承袭 |
待研发 --mark-yellow 登记 |
| GREEN |
S-cfc-197(本轮实测 37/37);S-cfc-182(R190 14/14) |
测试侧已取证 |
1.6 数据源健康度
| 数据源 |
读取键数 |
是否正常 |
备注 |
| 需求侧(⏳ wish) |
0 |
正常 |
SRS 目标池未启用;specs 201 份可读 |
| 契约常量(contract) |
5 类新增 |
正常 |
S-cfc-197/198/199/200 全部可收集可执行 |
| 测试用例引用(test_case_map) |
618 唯一 TC |
正常 |
台账扫描正常(表行 1168) |
| 执行结果回填(case_results) |
全量 386 XML + 增量 3 XML |
正常 |
386/386 无沉默,dump 0 |
二、历史审查记录(阶段 -1 记忆召回)
| 项 |
内容 |
| 上次审查 |
R190(2026-11-13 12:35,0e6f285da),结论「不通过(承袭,无回归、正向项明确)」,全站 4141/4026(97.22%),红 94;后端采信 R189;langgraph 50/51;204 节点恢复 |
| 历史遗留 |
后端存量 25 红(13 类)· 根级 16 红(B-36)· fe 3 预期 RED(S-cfc-132/133)· CI 漏拦/陈旧(B-152-1/2)· B-177-1 · B-178-1 · B-186-1 · B-189-1 |
| 本次是否改善 |
后端由采信转全量实跑(386 类 3315 例,零沉默零编译错);B-95 销号(204 连续 2 轮 6/6);S-cfc-197 37/37 GREEN;存量 13 类逐类零漂移;浏览器六件套任务级全绿 |
| 本次是否回退 |
langgraph 50/51 → 47/51(−3):4 红全为 test_auto_tag,日志 429 AgnesAI 免费额度耗尽 ×3 + 401 api key ****ab12 invalid ×5 → 上游凭据/配额环境型(节点 cfc-langgraph 与本地零 diff、窗口源码零变更)→ 非代码回归;G1 97.22% → 96.10%(红 +47 全为 TDD 前瞻契约 RED 45 + 环境红 3 − 装置浮动 1) |
| 教训应用 |
①「采信不得超过 2 轮」→ 本轮强制全量实跑(R189/R190 均采信);② 收尾两次 fetch(提交前 + 推送前)→ 本轮第二次抓到远端 3 个新契约类并增量复验(B-191-1);③ 绝不用「类/分钟」外推或提前 kill(R188 教训):本轮前半程 31 类/22min 仍耐心等完,最终 1:01h 自然收口;④ 远程派发用 setsid nohup 分离 + 单次读,不在等待期建 shell(B-125);⑤ 上游 401/429 与代码回归用「节点源码零 diff + 窗口源码零变更」判别(B-142-2 判别式) |
本次为该对象第 191 次审查,有历史记录;上述内容仅作对照,本轮全站所有维度均为本轮实测(后端全量 + 5 契约类定向 + 浏览器三节点 + langgraph 251 实派 + Jest 三套 + 线上 API),无承袭项。
三、项目画像与覆盖矩阵
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 控制器 / 395 测试源 / 386 执行类)/ cfc-frontend(42 测试文件 / 624 例)/ cfc-web(17 套件 / 116 例)/ cfc-langgraph(51 例 @251)/ tests(e2e-live 5 文件 + e2e/api 点名 4 文件) |
| 关键路径 |
登录/家庭/成员 → 五维能量 → 任务/成长记录 → 健康报告上传解析 → 测评订单 → 商城/支付 → AI 对话(LangGraph) |
| 测试现状 |
本轮全实测:后端全量 3315 + 增量 52 + fe 624 + web 116 + langgraph 51 + 浏览器 41 + API 32 + 根级 23 = 4254 例 |
| 质量目标 |
全量用例全绿、覆盖 SRS 与用户场景(含异常流)、浏览器双节点可复现、结果变更即提交并通知研发 |
| 风险点 |
① 后端 TDD 前瞻契约 RED 94 例(12 类)待实现;② 存量装置/数据红 24 例(13 类);③ CI 清单双向失真(漏拦 18 / 陈旧 26);④ 上游 LLM 凭据 + 配额双故障(429/401,live chat/analyze 挂死);⑤ 根级 16 红(9082 未起);⑥ 迁移 DDL 缺陷(B-156-1/B-170-1);⑦ pytest 进程不退出(B-177-1);⑧ 全量耗时劣化至 1:01h(B-191-2);⑨ git SSH 22 故障(B-189-1) |
| 待核实项 |
S-cfc-176 幂等分支排期 · 251 上游 key 更换(****ab12)与配额 · 204 销号后续稳定性 · B-156-1/B-170-1 修复状态 · S-cfc-186 跨家庭 IDOR 研发排期 · S-cfc-198 三项缺口(重试/分批/角色门禁)排期 |
3.2 20 类测试覆盖矩阵(全类不省略)
| # |
测试类型 |
三态 |
证据(本轮实测) |
| 1 |
单元测试 |
✅ 已发现 |
后端全量 386 类 3315 例(本轮实跑)+ 增量 3 类 52 例;前端 624;管理端 116 |
| 2 |
测试覆盖率 |
⚠️ 部分 |
管理端 Jest 覆盖率可产出(Lines 未变);后端未开 jacoco(未授权改 pom) |
| 3 |
变异测试 |
❌ 未发现 |
全仓无 pitest/mutation 配置(扫描 0 命中) |
| 4 |
集成测试 |
✅ 已发现 |
integration/* 本轮实跑:EnergySystemFlowTest 6F、GuideModuleIntegrationTest 1E、DailyCheckinStreakFlowTest 6/6、AdminFamilyOverview 341s 全绿等 |
| 5 |
契约测试 |
✅ 已发现(本轮重点) |
5 类全实测:S-cfc-197 37/37 GREEN、S-cfc-198 13(6F/7绿)、S-cfc-199 17(13F/4绿)、S-cfc-200 35(26F/9绿);历史契约窗 12 类 94 红承袭 |
| 6 |
接口 API 测试 |
✅ 已发现 |
线上 API 32 例(本轮实测:25 过 / 7 跳 / 0 红,18.2s;首跑 26 例异常见 B-191-3) |
| 7 |
系统/端到端 |
✅ 已发现 |
浏览器 41 例(39 过 + 2 跳):admin 5(本机+189)、fe 6(本机+204)、shop 4、health 13 |
| 8 |
验收 UAT |
⚠️ 待核实 |
无独立 UAT 包;以浏览器 39 例作为系统级验收代理 |
| 9 |
BDD 规格 |
✅ 已发现 |
用户场景 11 份 / SC 唯一 244;被台账引用 152 = 62.3% |
| 10 |
冒烟测试 |
✅ 已发现 |
api-smoke.spec.js 本轮全绿(含自注册链路) |
| 11 |
回归测试 |
✅ 已发现 |
存量 13 类逐类零漂移(第 26 次);浏览器/fe/web/API 全绿或零漂移 |
| 12 |
探索性测试 |
⚠️ 部分 |
历轮浏览器人工探索记录;本轮未安排新探索项 |
| 13 |
性能测试 |
❌ 未实测 |
未授权联网压测;仅 API 时延观察 + 后端耗时画像(B-191-2 493.97s 单类) |
| 14 |
可靠性测试 |
⚠️ 部分 |
B-177-1 第 13 轮复现:summary 打印后进程存活 4m33s(Sl),EXIT= 永不落盘;pytest 本身 134.17s 正常收口 |
| 15 |
安全测试 |
✅ 已发现 |
nonfunc-security.spec.js 11 例本轮全绿;匿名 6 端点 6/6 = 401 |
| 16 |
兼容性测试 |
⚠️ 部分 |
双视口(desktop 1440 / mobile 375)实测通过;无多浏览器矩阵 |
| 17 |
可用性测试 |
⚠️ 部分 |
登录-主框架-核心菜单旅程 5/5 × 2 节点;无专项可用性问卷 |
| 18 |
无障碍测试 |
❌ 未发现 |
无 axe/pa11y 配置 |
| 19 |
QA 流程 |
⚠️ 部分 |
汇报/台账/blockers 闭环在跑;CI 清单漏拦扩至 18(B-152-1/2 第 22 轮) |
| 20 |
质量指标 |
⚠️ 部分 |
全站 96.10%(G1 阈值 98% 未达);锚点 17.2%(R190 口径 20.1%,口径差异见 §附录 C) |
四、五要素问题清单
P1-1 后端 TDD 前瞻契约 RED 94 例(12 类)待研发实现
| 要素 |
内容 |
| ① 问题描述 |
本窗口与收尾远端共推入 5 个契约类,其中 4 类为 TDD-RED 先行态,累计 94 例红 / 12 类(TeacherMindRecord 12 · TeacherAppointmentGuard 10 · AdminKnowledgeBaseManage 6 · FamilyAutoCreateForPurchase 4 · PlanContentSafetyReview 4 · TeacherDataIsolationScT13 4 · TeacherPlanCreate 4 · NutritionPlanTeacher 3 · TeacherAssessmentRecord 3 · TeacherDimensionScore 2 · GuideFamilyTaskReview 2 · TeacherFamilyOverview 1 · 远端三类 39 例) |
| ② 测试 bug 点 |
AdminKnowledgeBaseManageContractTest#syncFailureRetry_syncPathShouldSupportRetry / #largeBatch_syncAndBackfillShouldSupportBatching / #permissionFlow_kbWriteEndpointsShouldEnforceRole(断言 expected true but was false);SupplierManageAdminContractTest(19 例 16F);DimensionConfigAdminContractTest(17 例 13F) |
| ③ 最优修改方案 |
研发按能力键逐项实现:① KnowledgeBaseController / KnowledgeBaseVectorController 补平台角色门禁(对齐 AdminUnifiedKnowledgeController.allowed);② 同步/回填路径补 syncBatch / BATCH_SIZE 分批;③ 补 maxRetries / syncWithRetry / @Retryable 重试;④ SC-A-06 停用在售商品守卫;⑤ 各 Teacher/成长域实现按 sc-key-map.md 排期 |
| ④ 修改目的 |
恢复「契约先行」闭环:契约红 → 实现 → GREEN;当前 94 红使 G2 无法归零,且掩盖真实回归信号 |
| ⑤ 修改后能否闭环 |
能。复测方式:mvn -o -B test -Dtest=<类> 逐类定向,单类 0F 且连续 2 轮 → 移出台账;契约类全绿后 gate_evaluator 的 G2 分母同步收缩 |
P1-2 存量装置/数据红 24 例(13 类,零漂移第 26 次)
| 要素 |
内容 |
| ① 问题描述 |
13 类 24 红:EnergySystemFlowTest 6F、GrowthPublicEndpointMappingTest 5E、DimensionRegistryMapContractTest 3F、OrchestrationEngineTest/OrchestrationIntegrationTest/MembershipPaySwitchTest/PaymentServiceORDRoutingTest/TeamProfitCronContractTest/UserServiceWechatLoginTest/UserServiceWechatLoginContractTest/GuideModuleIntegrationTest(1E)/MembershipPlanPurchaseContractTest/TaskReviewScP11ContractTest 各 1 |
| ② 测试 bug 点 |
TaskReviewScP11ContractTest 2F→1F 浮动(ReflectionUtils 反射装置无规则,B-178-1);GrowthPublicEndpointMappingTest 5E 因该文件未入库(??,B-162-1)且 334.2s;TeamProfitCronContractTest 平台费截断(数据) |
| ③ 最优修改方案 |
① B-178-1 用 @MockBean 替代反射注入;② B-162-1 把 GrowthPublicEndpointMappingTest / JwtInterceptorGrowthPolicyTest / ArticleTagsContractTest 三个 ?? 文件入库;③ TeamProfitCron 平台费按 BigDecimal 精度修正(断言侧改 compareTo 或实现侧改舍入) |
| ④ 修改目的 |
消除装置噪声,使「红」只代表产品缺陷(G2/G13 可信) |
| ⑤ 修改后能否闭环 |
能。定向复跑单类 0F 连续 2 轮 → 从 BACKEND_OBSERVED_CLASSES 移除 → CI 硬门禁自动收紧 |
P1-3 B-191-1 窗口内多次推入契约类,全量与收尾口径不一致(流程)
| 要素 |
内容 |
| ① 问题描述 |
13:14 基线 309fa0220;跑测中本地 HEAD → 123f768c7(+S-cfc-197 37 例);收尾 fetch 远端 +11 提交(5ad781a00,+S-cfc-199/200 三个契约类 52 例)。若只跑一次全量就定稿,会把 52 例(39 红)记为「未覆盖」 |
| ② 测试 bug 点 |
非用例缺陷,属取证流程缺口:单次 fetch + 单次全量无法覆盖窗口尾部的并行提交 |
| ③ 最优修改方案 |
固化「双 fetch + 增量定向」:提交前 fetch 一次、推送前再 fetch 一次;若 git diff --name-only 命中 src/test/** → 逐类定向复跑并计入总量;命中 src/main/** → 全量重跑或标「截断」 |
| ④ 修改目的 |
保证「报告例数 = 真实覆盖率」,避免已实现资产被漏记、避免把新契约红误判为回归 |
| ⑤ 修改后能否闭环 |
能。本轮已按此执行(52 例全部取证,39 红计入 G2 的「前瞻契约」栏);下轮起写入 SOP §阶段 4 |
P1-4 B-152-1/2 CI 清单双向失真(漏拦扩至 18 类)
| 要素 |
内容 |
| ① 问题描述 |
.gitlab-ci.yml:61 BACKEND_OBSERVED_CLASSES 33 类 vs 实测红类 25 类 → 漏拦 18 类(含本轮 5 个新契约类:AdminKnowledgeBaseManage / FamilyAutoCreateForPurchase / GuideFamilyTaskReview / NutritionPlanTeacher / PlanContentSafetyReview / TeacherAppointmentGuard / TeacherAssessmentRecord / TeacherDataIsolationScT13 / TeacherDimensionScore / TeacherFamilyOverview / TeacherMindRecord / TeacherPlanCreate / SupplierManageAdmin? 等)、陈旧 26 类(早已全绿仍被排除) |
| ② 测试 bug 点 |
非用例缺陷,属 CI 配置漂移;backend-blocking-junit job 在含红例分支上必然失败,同时对 26 个已绿类失去回归守护 |
| ③ 最优修改方案 |
用本轮实测红类集合重写清单(25 类),并加一条 CI 步骤:mvn test 后自动比对 surefire 红类与清单,差异即 fail 并输出差集 |
| ④ 修改目的 |
让硬门禁真实生效(既不漏拦红类,也不虚化 26 类的守护) |
| ⑤ 修改后能否闭环 |
能。验证方式:在含红例分支跑一次 CI,backend-blocking-junit 应「必红且红因准确」 |
P1-5 B-142-2 复发 + B-186-1 live 链路挂死(上游 LLM)
| 要素 |
内容 |
| ① 问题描述 |
langgraph@251:pytest 47/51,4 红全 test_auto_tag;日志 429 You've reached the API rate limit for free users (AgnesAI) ×3 + 401 Authentication Fails, Your api key: ****ab12 is invalid ×5;同实例 /health 200/2.07ms,但 /api/v1/chat 000/40.0s/0B、/api/v1/analyze 000/50.0s/0B |
| ② 测试 bug 点 |
app/graphs/chat_graph.py:148/195(召回/保存记忆 401)、app/agents/intent_classifier.py:62(429 后 默认 chat 静默兜底) |
| ③ 最优修改方案 |
运维更换有效 key 并升级配额;研发把 intent_classifier 的兜底改为「显式降级 + 可观测指标」;chat_graph 对 401 快速失败而非重试挂死 |
| ④ 修改目的 |
使「单测绿」与「真实链路可用」不再背离(R188 曾出现 51/51 绿 + chat 120s 零字节) |
| ⑤ 修改后能否闭环 |
能。判据:pytest 51/51 且 live chat/analyze 200 且 p95 < 30s,连续 2 轮 |
P2-1 B-191-2 全量耗时劣化至 1:01h(装置/性能)
| 要素 |
内容 |
| ① 问题描述 |
同源码 R188 43:15 → 本轮 1:01h(+41%);慢类 ArticleCategoryControllerTest 493.97s、AdminFamilyOverviewControllerTest 341.2s、GrowthPublicEndpointMappingTest 334.2s、GrowthRecordSyncFlowTest 280.7s、PlannerBindInviteFlowTest 178.1s(前 5 占 ~45%);cfc-scheduler 日志 20524/73287 = 28.0%、上下文启动多次 |
| ② 测试 bug 点 |
装置层:controller 层 @SpringBootTest 全上下文 + src/test/resources 缺 application-test.yml → 每类重跑 DatabaseInitializer 全量迁移;@EnableScheduling 在测试态常驻 |
| ③ 最优修改方案 |
① 增设 src/test/resources/application-test.yml(禁 @EnableScheduling、共享 datasource);② 慢类改 @WebMvcTest + @MockBean;③ 修 B-156-1/B-170-1 两条迁移语法错(避免 34 次建表全失败的重试开销) |
| ④ 修改目的 |
把全量压回 ≤45min,使「每轮全量实跑」可持续(当前 1h+ 已挤压巡检预算) |
| ⑤ 修改后能否闭环 |
能。判据:mvn -o -B clean test 的 Total time ≤ 45:00 且类数不变 |
P2-2 B-191-3 线上 API 套件首跑例数不完整(工具/度量)
| 要素 |
内容 |
| ① 问题描述 |
首跑 --reporter=line 得 26 例(19 过 + 7 跳)/5.4min;二次同命令 --reporter=list 得 32 例(25 过 + 7 跳)/18.2s(与 R190 一致)。首跑 6 例未计入,且耗时高 18 倍 |
| ② 测试 bug 点 |
无用例缺陷;属运行口径不可复现(疑与首次冷启动/网络抖动/--output 目录复用有关) |
| ③ 最优修改方案 |
采集侧固化「双校验」:必须同时满足 Running N tests 的 N = 点名文件静态用例数、summary 的 pass+fail+skip = N;任一不符即重跑并记录两次口径 |
| ④ 修改目的 |
防止「例数漂移」被当成覆盖变化(本项目已多次出现 990 vs 32 的口径问题,B-173-2) |
| ⑤ 修改后能否闭环 |
能。本轮已用二次运行定案(32 例);下轮起把双校验写入附录命令模板 |
P2-3 B-177-1 pytest 进程不退出(第 13 轮)
| 要素 |
内容 |
| ① 问题描述 |
summary 已打印(4 failed, 47 passed in 134.17s)但 2 个进程存活 4m33s(ps 状态 Sl),echo EXIT=$rc 永不执行 → 日志无 EXIT= 行;kill -9 后清理干净 |
| ② 测试 bug 点 |
app/main.py lifespan 未 await client.aclose()(线索 RuntimeWarning: coroutine 'JavaClient._get_client' was never awaited);派发器缺超时兜底 |
| ③ 最优修改方案 |
产品侧补 shutdown 钩子关闭 http client;派发器命令加 timeout -k 10 900,并以 summary 文本 + 进程存活双判据定案 |
| ④ 修改目的 |
CI 里 pytest job 不挂死(否则流水线超时) |
| ⑤ 修改后能否闭环 |
能。判据:进程在 summary 后 ≤10s 退出且 EXIT=0 落盘 |
P2-4 B-189-1 git SSH 22 故障(第 2 轮)
| 要素 |
内容 |
| ① 问题描述 |
git fetch origin 走 git@git.iwintrue.com:iwt/cfc.git 报 Please make sure you have the correct access rights;改 http://git.iwintrue.com/liaoxg/cfc.git 后 fetch/推送均成功 |
| ② 测试 bug 点 |
环境侧(Gogs sshd 22 端口不可用),非代码 |
| ③ 最优修改方案 |
运维恢复 22 端口;或把 CI/自动化节点的 origin fetch URL 一并改为 HTTP(当前 push URL 已是 HTTP,fetch 仍 SSH) |
| ④ 修改目的 |
保证自动化闭环的「真理证据」通道不依赖人工兜底 |
| ⑤ 修改后能否闭环 |
能。判据:git fetch origin 无凭据报错且 rev-list --left-right --count 可算 |
五、域结论表
| 审查维度 |
负责专家 |
结论 |
关键证据 |
| 单元·组件级(单元/覆盖率/变异) |
苏雅 |
⚠️ 部分通过 |
后端 386 类 3315 例实跑(3232 过 / 79 红 / 4 跳);386/386 XML 无沉默;覆盖率仅管理端可产出;变异测试全仓 0 配置 |
| 集成·接口级(集成/契约/API) |
柯砚 |
⚠️ 部分通过 |
集成域实跑(EnergySystemFlow 6F、GuideModule 1E、DailyCheckin 6/6);契约 5 类全实测(S-cfc-197 GREEN、S-cfc-198 6F、远端三类 39F);线上 API 32 例 25/0/7 |
| 系统·验收级(E2E/UAT/BDD) |
白樾 |
✅ 通过(浏览器级) |
admin 5/5(本机+189)、fe 6/6(本机+204)、shop 4/4、health 13/13;UAT 无独立包(以 39 例代理);SC 244 映射 152 = 62.3% |
| 测试保障级(冒烟/回归/探索) |
闻朔 |
✅ 通过 |
冒烟全绿;回归零漂移第 26 次;探索性无新增章程(承袭) |
| 性能·可靠性 |
骆骋 |
⚠️ 部分 |
全量 1:01h(B-191-2,慢类 493.97s);pytest 进程不退出(B-177-1 第 13 轮);未授权压测 |
| 安全 |
关屿 |
✅ 通过(本轮实证) |
匿名 6 端点 6/6 = 401;nonfunc-security 11 例全绿;S-cfc-198 揭示知识库写入无角色门禁(已记 P1-1 ③) |
| 兼容·体验 |
阮清 |
⚠️ 部分 |
双视口通过;无多浏览器矩阵;无 axe/pa11y |
| 流程·度量·代码 |
何序 |
⚠️ 部分 |
CI 漏拦 18 / 陈旧 26(G11 ❌);锚点 17.2%;@GetMapping 8 处仍违规范;specs 201 份、控制器 366 |
六、门禁结论
结论:不通过(有条件) —— 全站 4254 例 / 4088 过 = 96.10%(剔 skip 96.67%),红 141。红数环比 +47 的构成:TDD 前瞻契约 RED +45(本地 S-cfc-198 6 + 收尾远端三类 39)、上游环境红 +3(langgraph 429/401)、装置浮动 −1(TaskReviewScP11 2F→1F),零缺陷回归;剔除全部预期 RED(97 例)后 98.34%。阻断项为前瞻契约待实现 + 存量装置红 + CI 清单失真 + 上游 key/配额失效 + 全量耗时劣化,均非本轮新增回归。
| 门禁 |
判定 |
依据(本轮实测) |
| G1 全站通过率 ≥98% |
❌ 96.10% |
4088/4254(剔 skip 96.67%,剔预期 RED 98.34%);−1.12pct 因前瞻契约 +45 与环境 +3 |
| G2 后端红归零/契约裁决 |
❌ 118 红 |
全量 79(73F+6E)+ 增量 39 = 存量 24(13 类) + 前瞻契约 94(12 类);存量逐类零漂移 |
| G3 前端双绿 |
⚠️ fe 609/624(3 预期 RED)+ web 116/116;浏览器 fe 6/6 双节点 |
3 红全为 S-cfc-132/133 未交付(AC-R1/AC-R2/AC-2 RED-A7) |
| G4 编译可编译 |
✅ |
Compiling 2121 main + 392 test source files,0 错(含 5 个新契约类) |
| G5 结果完整性 |
✅ |
386/386 XML 可聚合、无沉默类;*.dump 0;增量 3 XML 完整 |
| G6 浏览器 E2E |
✅ 39 过 + 2 跳 |
admin 5/5(本机 1.4m + 189 1.3m)、fe 6/6(本机 1.9m + 204 44.7s)、shop 4/4(9.7s)、health 13/13(5.5s)、dx 2 跳 |
| G7 langgraph |
❌ 47/51(92.2%) |
4 红全 test_auto_tag;429 AgnesAI ×3 + 401 ****ab12 ×5;live chat 000/40s、analyze 000/50s;节点源码与本地零 diff → 环境红 |
| G8 匿名鉴权 401 |
✅ 6/6 |
mind/fortune、energy/overview、health/plan/list、xiaomi-health、huawei-health、admin/families/overview 全 401 请先登录 |
| G9 用例锚定 SRS |
❌ 17.2% |
双向命中 106 / 台账 618;锚点 153(孤儿 47、空转 512);SC 映射 62.3% |
| G10 节点可比 |
✅ 三节点 |
189 admin 5/5(spec blob 4703d73fb=本机)、204 fe 6/6、251 pytest(cfc-langgraph 与本地零 diff)+ 本机四件套 |
| G11 CI 硬门禁 |
❌ |
清单 33 vs 实测红 25 → 漏拦 18 / 陈旧 26(第 22 轮未修) |
| G12 SRS 变更驱动用例更新 |
✅ |
specs 201 / test-cases 16 / 场景 11 / API_REFERENCE 窗口零变更 → 我无需新增或改用例;窗口 5 个契约类由并行会话产出,本轮全部补验 |
| G13 存量红零漂移 |
✅ 第 26 次 |
13 类逐类与 R190 一致(唯一差异 TaskReviewScP11 2F→1F 装置浮动) |
| G14 场景→用例映射 |
⚠️ 62.3% |
244 SC 中 152 被台账引用 |
七、变更触发动作(用户规则:结果有变 → 提交远程 + 通知研发)
| 项 |
内容 |
| 结果是否变化 |
是 — 后端由「采信」转全量实跑(386 类 3315 例,新增 5 契约类 102 例);langgraph 50/51→47/51;B-95 销号;S-cfc-197 GREEN;红 94→141(全为预期 RED/环境) |
| 提交 |
本轮报告 + 执行日志 + blockers + 研发通知 + 台账(详见 §1.4) |
| 推送 |
✅ http://git.iwintrue.com/liaoxg/cfc.git → cfclub(SSH 22 故障,HTTP 兜底第 2 轮) |
| 通知研发 |
① 仓库 docs/tdd/notice-2026-11-13-R191-研发通知.md;② docs/tdd/test/blockers.md R191 段(P0/P1 排序);③ Agent Mail 仍不可用(GetMe → not_bound,「请勿重试」)→ 以 ①+②+推送落地 |
八、待办
| 优先级 |
事项 |
归属 |
| P0 |
CI BACKEND_OBSERVED_CLASSES 按实测 25 类重写(漏拦 18 / 陈旧 26) |
研发/CI |
| P0 |
251 上游 LLM key 更换(****ab12 invalid)+ 配额升级 |
运维 |
| P1 |
前瞻契约 RED 94 例逐键实现(S-cfc-198 重试/分批/角色门禁优先) |
研发 |
| P1 |
存量 13 类装置红治理(@MockBean 替反射、3 个 ?? 测试类入库、平台费精度) |
研发/测试 |
| P1 |
全量耗时压回 ≤45min(application-test.yml + 慢类拆 @WebMvcTest) |
测试/研发 |
| P2 |
pytest shutdown aclose() + 派发器 timeout -k 10 900 |
研发/测试 |
| P2 |
git SSH 22 恢复(或把 fetch URL 一并改 HTTP) |
运维 |
| P2 |
9082 本地起服务后复跑根级 16 红(B-36) |
测试 |
附录 A:本轮命令与口径(可复现)
# 环境探针(SOP 第一步)
/d/jdk1.8.0_25/bin/java -version && JAVA_HOME=/d/jdk1.8.0_25 /d/maven/apache-maven-3.6.1/bin/mvn -v
# 后端全量(工程根必须在 cfc-backend)
cd d:/cfc/cfc-backend && JAVA_HOME=/d/jdk1.8.0_25 /d/maven/apache-maven-3.6.1/bin/mvn -o -B clean test # 1:01h
# 聚合:surefire XML → 386 类 / 3315 例 / 73F+6E+4S
# 收尾增量(快进 5ad781a00 后)
mvn -o -B test -Dtest='AdminSupplierManageContractTest,SupplierManageAdminContractTest,DimensionConfigAdminContractTest' # 52 例 / 39F
# 浏览器(必须在 tests/ 内跑;每节点 1 个浏览器任务,本机串行)
cd d:/cfc/tests
npx playwright test --config=playwright.config.live.js --project=admin-desktop
npx playwright test --config=playwright.config.live.js --project=frontend-mobile
npx playwright test --config=playwright.config.live.js --project=shop-api
npx playwright test --config=playwright.config.health.js # health 不在 live config 的 project 内
npx playwright test --config=playwright.config.live.js --project=dx-bridge
# 189 节点 admin(单节点任务)
node _r190_189_admin.cjs kick && node _r190_189_admin.cjs read
# 204 节点 frontend(openCode 在 204:4091,项目 D:\cfc)
node _r190_204_run.cjs
# 251 节点 langgraph pytest(setsid 分离 + 单次读,禁止轮询建 shell)
node _r191_251_lg.cjs kick / read / run
# Jest
cd d:/cfc/cfc-web && npx jest --ci # 116/116
cd d:/cfc/cfc-frontend && npx jest --ci # 609 passed / 3 failed / 12 skipped
cd d:/cfc/tests && npx jest --config=jest.config.js # 7/16(9082 未起)
# 线上 API 32 例(点名 4 文件,勿带全量 testMatch)
cd d:/cfc/tests && npx playwright test -c playwright.config.api.js --output=../_r191_api2 \
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 --reporter=list
# 匿名鉴权探针
for u in /api/mind/fortune /api/energy/overview /api/health/plan/list /api/xiaomi-health/status /api/huawei-health/status /api/admin/families/overview; do
curl -s -m 12 -X POST -H 'Content-Type: application/json' -d '{}' -w " [%{http_code}]\n" "http://cfc.iwintrue.com$u"; done
附录 B:窗口 5 个契约类定向实测明细(B-191-1 补验)
| 契约类 |
关联键 |
例数 |
通过 |
红 |
结论 |
AdminReportParserManageContractTest |
S-cfc-197 admin.reportParser.manage |
37 |
37 |
0 |
GREEN ✅(实现已落地,可转 YELLOW/GREEN) |
AdminKnowledgeBaseManageContractTest |
S-cfc-198 admin.knowledgeBase.manage |
13 |
7 |
6 |
预期 RED:同步失败重试 / 大批量分批 / base+vector 角色门禁三项未实现 |
DimensionConfigAdminContractTest |
S-cfc-199 admin.dimension.config |
17 |
4 |
13 |
预期 RED(维度/权重/上限 CRUD + 来源比例治理未落地) |
AdminSupplierManageContractTest |
S-cfc-200 admin.supplier.manage |
16 |
6 |
10 |
预期 RED(410 废弃壳 / 边界门禁 / role 守卫) |
SupplierManageAdminContractTest |
S-cfc-200 契约级 |
19 |
3 |
16 |
预期 RED(SC-A-06 停用在售商品守卫未落地) |
| 合计 |
— |
102 |
57 |
45 |
45 红全为 TDD 前瞻态,非缺陷回归 |
附录 C:度量口径声明(B-124 并存口径)
| 指标 |
本轮口径 |
数值 |
与 R190 差异说明 |
| 台账 TC 唯一 |
tests/test-cases/*.md 全量 TC-* 去重 |
618 |
R190 报 308 为「单套命名」口径;本轮含 TC-<域>-<标签>-<NN> 与 TC-<域>-U<NN> 两套命名 |
| 表行 |
台账 md 中以 ` |
` 开头行 |
1168 |
| 严格锚点 |
tests/** JS/TS/py(排除 generated)∪ cfc-backend/src/test/**/*.java |
153 |
R190 报 115(未并 Java 测试锚点) |
| 双向命中(G9) |
台账 ∩ 锚点 |
106 = 17.2% |
R190 报 20.1%(= 62/308,分母口径不同) |
| 场景→用例 |
SC ∩(台账出现的 SC) |
152/244 = 62.3% |
R190 报 57.9%/72.1%(三套口径并存,见 B-124) |
口径差异属既有 B-124 问题(度量脚本多口径),不与 R190 直接比大小;本轮同时给出全部原始数以便追溯。
附录 D:本轮遗留取证文件(未入库,供复核)
_r191_backend_full.log(1:01h 全量日志 73287 行)、_r191_incr.log(增量 52 例)、_r191_browser.log、_r191_api.log、_r191_web_jest.log、_r191_fe_jest.log、_r191_root_jest.log、_r191_251_lg.cjs、_r191_metrics.py、_r191_api/、_r191_api2/、_r191_pw_*。