report-test-2026-11-11-R147.md 27 KB

测试负责人工作汇报(第 147 轮 · 2026-11-11 GMT+8)

角色:cfc-tester(测试负责人)|执行档:review(离线;内网 cfc.iwintrue.com/admin + /frontend 浏览器自动化;langgraph 实派 192.168.16.251;未联网装依赖、未启停服务、未改生产代码) 基线 HEAD:df4c2ab45(R146),窗口内 origin 推进至 c21934790(仅 cfc-web 版本号 bump + CHANGELOG + 研发 R119 汇报,零功能源码变更)→ 后端全量采信 R146(44m 实跑刚产出、窗口零源码变更),浏览器 / langgraph / 三套 Jest / 根级本轮全部实跑。 节点:189:4090 = 200 且 shell 可建可读 → admin-desktop 实派 5/5|251:4096 = 200、251:9000 /health = ok → langgraph pytest 实派 51 例|204:4090 = 000(B-95 第 18 轮) 分工:189 = admin-desktop E2E(1.2m);251 = langgraph pytest(506.90s);本机 = 浏览器 fe/shop/health/dx + 三套 Jest + 根级 + 报告编译 结论:⚠️ 有条件通过 —— langgraph 51 例首次全绿(R146 2 红全部转绿,B-142-2 红例清零、疑似销号待下轮复验);浏览器 28/28 + dx 2 skip(189 实派 5/5);全量 3782 例 / 3728 过 = 98.57%(G1 ✅)。G2(36 红)/ G9 锚点 / G11 CI 仍未达阈值。 变更触发:langgraph 2 红→0 红(首次全绿)→ 结果实质改善 → 已 push + 通知研发(见 §9)。


0. 基本信息

项目 内容
汇报人 cfc-tester(测试负责人)
汇报周期 2026-11-11(第 147 轮,跑测窗口 15:43–16:05)
负责模块/单元 cfc-backend(采信 R146) · cfc-frontend(Jest 实跑) · cfc-web(Jest 实跑) · cfc-langgraph(251 实派全绿) · 浏览器 E2E(admin@189、frontend·shop·health·dx@本机) · 根级黑盒(实跑)
执行档 review(离线;未装依赖、未启停服务、未改生产代码)

0.1 测试用例建设与执行

指标 数量 填写说明
本轮新增测试用例数 0 个 SRS/specs/API_REFERENCE/test-cases 窗口零变更(git diff df4c2ab45..origin/cfclub 仅版本号 + docs)→ G12 合规
本轮验证执行测试数 3782 个 后端 2946(采信)+ 前端 616 + 管理端 116 + 根级 23 + langgraph 51 + 浏览器 30(含 dx 2 skip)
用例通过率 98.57%(3728/3782) 剔 skip 口径 99.04%(3728/3764);红 36(后端 17 + 前端 3 + 根级 16 + langgraph 0)
新增覆盖资产 0 项 无 SRS 变更、无新契约文件

0.2 会话与任务分发

指标 数量 填写说明
分派任务数 2 个 ① 189:admin-desktop E2E(1.2m,5/5);② 251:langgraph pytest(506.90s,51/51 全绿);其余本机直跑
恢复智能体会话数 0 个 无中断/重建
当前在用会话数 3 个 本机(done)/ 189=shell(done, EXIT=0)/ 251=shell(done, pytest 正常收尾)

0.2b 各会话当前工作状态

会话标签 会话 ID 当前状态 当前任务 静默/空闲时长 工作目录 备注
本机 localhost done 浏览器 fe/shop/health/dx + Jest×3 + 根级 — d:\cfc fe 48.1s、shop 4.7s、health 4.0s;Jest 33.8s/33.2s/9.4s
189:4090 shell 直连 done admin-desktop E2E — C:\code\cfc\tests 5/5 通过(1.2m,EXIT=0)
251:4096 shell 直连(tee 落盘) done langgraph pytest 506.90s /sc-data/cfc/cfc-langgraph 51/51 全绿(首次);HEAD c21934790 = origin 最新
204:4090 — unknown(000) 失联 — — B-95 第 18 轮

0.3 问题处置

指标 数量 填写说明
新测试发现问题数 0 个 无新红、无新 B-* 登记
已解决测试相关问题数 0 个 无测试侧自闭环(零 SRS 变更)
待解决测试相关问题数 8 类 后端 17 存量红 · 前端 3 预期 RED · 根级 16 环境红 · dx 2 端点 404(B-DX-1 第 9 轮)· 204 失联(B-95 第 18 轮)· admin 鉴权门缺失(B-142-1 第 6 轮)· nutrition_age_dosage 建表失败(B-145-1 第 3 轮)· B-134-4 兜底缺陷(本轮未触发)

0.4 本轮 git 提交与推送证据

提交 sha 关联键 阶段 触及文件 目标分支 已推送远端 备注
见 §9 R147 报告 + 通知 + 台账更新 测试闭环 docs/tdd/** + tests/e2e/_automation_reachability_result.json cfclub 是 结果变化触发(langgraph 2→0 红首次全绿)

1. 历史审查记录(仅作对照,不作为本轮结论依据)

轮次 时间 后端全量 langgraph 浏览器 前端 Jest 结论
R144 11-11 11:43 采信 R142 251 实派 36 过 / 7 红 / 43 例 28/28 + dx 2 skip 采样 601/3/12 有条件通过
R145 11-11 13:25 347/2946/2925 过/99.29%/17 红(实跑) 251 实派 45 过 / 6 红 / 51 例 28/28 + dx 2 skip(189 双节点恢复) 601 过/3 红/12 跳 有条件通过
R146 11-11 14:42 347 类 / 2946 例 / 2925 过 / 99.29%(实跑 44m)/ 17 红 251 实派 49 过 / 2 红 / 51 例 28/28 + dx 2 skip(189 5/5) 601 过 / 3 红 / 12 跳(实跑) 有条件通过
R147(本轮) 11-11 15:56 采信 R146(2946/2925/17 红,零源码变更) 251 实派 51 过 / 0 红 / 51 例(首次全绿) 28/28 + dx 2 skip(189 5/5) 601 过 / 3 红 / 12 跳(实跑) 有条件通过

本轮变化(对照 R146)

项 R146 R147 判定
后端 347/2946/2925 过/17 红(44m 实跑) 采信 R146(窗口零源码变更) 零漂移(17 红逐类逐例同集合,第 7 次)
langgraph 51 例 / 49 过 / 2 红(ConnectError 上游) 51 例 / 51 过 / 0 红(506.90s) +2 过 / −2 红,首次全绿,实质改善
浏览器 admin 节点 189 实派 5/5 189 实派 5/5(1.2m) G10 双节点维持
前端 Jest 601/3/12 601/3/12(实跑) 零漂移
全量通过率 98.52%(3782/3726) 98.57%(3782/3728) +0.05pp(langgraph 改善驱动)

2. 项目画像(简版,SRS 口径)

维度 本轮事实
业务定位 家庭教育成长平台(五维能量 · 健康报告 · 测评订单 · 家庭邀请 · 商城 · AI 管家)
技术栈 Spring Boot 2.7.18 + MyBatis-Plus(Java 8,9082)· uni-app 小程序 Vue2 · Vue2+Element UI 管理端 · FastAPI+LangGraph+ChromaDB(9000)
模块结构 cfc-backend(347 测试类 / 366 控制器)· cfc-frontend(40 套件 / 616 例)· cfc-web(17 套件 / 116 例)· cfc-langgraph(51 例)· tests/(浏览器 30 + 根级黑盒 23)
关键路径 登录鉴权(JWT + /api/** 拦截)→ 家庭/成员 → 五维能量 → 健康报告上传解析 → 健康方案 → 商城订单/支付 → AI 对话/分析
质量目标 全量通过率 ≥98%、零未归因红、SRS 场景锚点可追溯、CI 全量门禁
风险点 ① /api/admin/** 鉴权门缺失(B-142-1);② langgraph 依赖 251 LLM 上游稳定性(本轮恢复,B-142-2 疑似销号待复验);③ nutrition_age_dosage 建表失败(B-145-1);④ 204 节点失联、dx 端点未部署

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

# 测试类型 状态 证据(本轮)
1 单元测试 ✅ 已实测 后端 2946 例(采信 R146 44m 实跑);web 116 实跑;fe 616 实跑
2 组件测试 ✅ 已实测 fe 40 套件 / web 17 套件(shallowMount 组件用例)
3 接口 API 测试 ✅ 已实测 后端 MockMvc/直调覆盖 366 控制器面;langgraph 51 例(251 实派全绿)
4 集成测试 ✅ 已实测(有红) integration.*:EnergySystemFlowTest 6F、DimensionRegistryMapContractTest 3F、GuideModuleIntegrationTest 1E(采信 R146)
5 系统/端到端 E2E ✅ 已实测 浏览器 30 例:189 admin 5/5 + 本机 fe 6/6、shop 4/4、health 13/13、dx 2 skip
6 冒烟测试 ✅ 已实测 浏览器 28 通过 + 后端 2925 过 + Jest 717 构成本轮冒烟面
7 回归测试 ✅ 已实测 后端存量 17 红逐类同集合(零漂移第 7 次);web 116、fe 601、根级 23 零漂移
8 探索性测试 ⚠️ 待核实 无 charter 记录(沿用历轮结论)
9 验收 UAT / BDD ⚠️ 待核实 无 cucumber/gherkin 执行证据(*.feature = 0)
10 性能测试 ⛔ 未授权未执行 压测属 execute 档,需联网显式授权(仅记录真实耗时)
11 可靠性测试 ✅ 已实测 后端 44m 无中断、347/347 XML 无沉默(采信);langgraph 506.90s 正常收尾(B-126 未复现,第 8 轮)
12 安全测试(SAST/DAST/SCA/渗透) ⛔ 未授权未执行 仅鉴权契约面:线上 5/5 匿名 POST → 401(G8 ✅);B-142-1 复核:/api/admin/families/overview 匿名 POST → HTTP 200 + code:400(延续第 6 轮)
13 兼容性测试 ⚠️ 待核实 仅 Chromium 单引擎(1440×900 / 375×812)
14 可用性测试 ⚠️ 待核实 无真实用户可用性证据
15 无障碍测试 ⚠️ 待核实 无 axe/WCAG 扫描
16 覆盖率度量 ⚠️ 已实测(低) web 语句 ≈10%(17 套件);后端 JaCoCo 未接入(pom 中 jacoco=0)→ 无行覆盖
17 变异测试 ⛔ 未发现 无 PIT / mutation 资产(pitest=0)
18 契约测试 ✅ 已实测 health 13/13、shop 4/4、dx 2(skip=404);后端契约类 DimensionRegistryMap 3 红(待裁决)、WechatLoginContract 1 红、TeamProfitCronContract 1 红
19 QA 流程 ⚠️ 待核实 147 轮闭环可追溯;门禁未脚本化(人工判读)
20 覆盖率门禁/CI ⛔ 未发现 .github/workflows 不存在(CI=0)→ 无 CI 全量 job(G11 ❌)

4. 本轮实测明细

4.1 后端全量(采信 R146,44 分钟实跑;窗口零源码变更)

基线 df4c2ab45..origin/cfclub:仅 cfc-web 版本号 bump + CHANGELOG + docs —— 后端源码零 diff
R146 实跑证据:Tests run: 2946, Failures: 16, Errors: 1, Skipped: 4(BUILD FAILURE:仅测试红)
指标 值
测试类 / 用例 347 类 / 2946 例
通过 / 红 / 跳过 2925 / 17 / 4
通过率 99.29%(剔 skip 99.42%)
产物完整性 target/surefire-reports 347/347 XML(无静默丢失)
编译 testCompile 353 源 0 错(main 2121 源 0 错)
17 红归因 装置/契约待裁决 10(DimensionRegistryMapContract 3 + Orchestration 2 + Payment 2 + WechatLogin 2 + TeamProfitCron 1)+ 集成 7(EnergySystemFlow 6F+1S、GuideModule 1E)→ 零回归(第 7 次)

4.2 浏览器自动化(用户核心指令)— 双节点 ✅

套件 节点 例数 结果 耗时 备注
admin-desktop 189 5 5/5 通过 1.2m TC-A-U01~U05 全绿(登录 6.1s、核心菜单 56.3s);EXIT=0
frontend-mobile 本机 6 6/6 通过 48.1s 游客浏览/五维沙盘/TabBar/鉴权引导
shop-api 本机 4 4/4 通过 4.7s 价格排序契约(S1)
health-contract 本机 13 13/13 通过 4.0s 华为/小米/健康方案 鉴权 401 保障
dx-bridge 本机 2 2 skip — bridge/{list,sync-status} → 404(B-DX-1 第 9 轮)
合计 双节点 30 28/28 过 + 2 skip ~2m G10 双节点维持

4.3 langgraph pytest(251 实派)✅ 首次全绿(本轮最大改善)

类别 例数 结果 根因
全量(--ignore=tests/qna --ignore=tests/test_chat.py) 51 51/51 全绿(506.90s) R146 的 2 红(auto_tag ConnectError)本轮全部转绿——LLM 上游恢复
non-LLM 面 39 39/39 过 代码层面零回归
auto_tag(LLM 依赖) 4 4/4 过(R146:2/4) 上游连接恢复,无 ConnectError/401/429 日志
intent(LLM 依赖) 5 5/5 过 连续第 2 轮全绿
qna / test_chat — 排除 --ignore=tests/qna --ignore=tests/test_chat.py(B-141-1 收集期缺陷)

关键证据(251 日志实测)

  • pytest 汇总:51 passed, 8 warnings in 506.90s (0:08:26) —— 无 FAILED 行
  • 日志零 ConnectError / Authentication Fails / 429 —— B-142-2 红例首次清零(疑似销号,待下轮复验确认后正式销号)
  • 节点 HEAD c21934790 = origin 最新(窗口源码零变更)→ 改善归因环境/上游恢复,非代码修复
  • LG_EXIT=124 为 timeout 管道噪音(pytest 完整输出 51 passed 后 shell 才收尾,R139/143 同款怪癖);进程正常退出、无挂起特征 → B-126 连续观察第 8 轮未复现

4.4 其余套件(实跑)

套件 结果 耗时 备注
cfc-web Jest 116/116(17 套件) 33.8s 零漂移
cfc-frontend Jest 616:601 过 / 3 红 / 12 跳 33.2s 3 红为 S-cfc-132/133 预期 RED(signature.consignee 2 + growthHistory.dayGroupView 1)
根级黑盒 Jest 23:7 过 / 16 红 9.4s 16 红全 ECONNREFUSED 127.0.0.1:9082(B-36 第 43 轮零漂移)

4.5 全量口径汇总

套件 用例 通过 红 跳过 通过率
cfc-backend 2946 2925 17 4 99.29%
cfc-frontend 616 601 3 12 97.56%
cfc-web 116 116 0 0 100%
根级黑盒 23 7 16 0 30.43%
cfc-langgraph 51 51 0 0 100%
浏览器 E2E 30 28 0 2 93.33%
合计 3782 3728 36 18 98.57%(剔 skip 99.04%)

4.6 线上鉴权与可达性

项 结果
匿名 POST 鉴权面 /api/mind/fortune /api/energy/overview /api/health/plan/list /api/huawei-health/status /api/xiaomi-health/status → 5/5 = 401(G8 ✅,B-69 销号第 10 轮维持)
admin 鉴权门(B-142-1 复核) POST /api/admin/families/overview 匿名 → HTTP 200(body code:400,拦截器放行、参数校验先返回)——延续第 6 轮
页面 /admin 302→200、/frontend 302→200
dx 端点 bridge/list 404、bridge/sync-status 404(B-DX-1 第 9 轮)

5. 门禁结论(⚠️ 有条件通过)

门禁 指标 阈值 本轮 结果
G1 全量通过率 3728/3782 ≥ 98% 98.57% ✅
G2 零未归因红 36 红(17 存量 + 3 预期 + 16 环境 + lg 0) 0 36,全部已归因 ❌
G3 前端 Jest 601/3/12 0 非预期红 3 预期 RED(有台账) ⚠️
G4 管理端 116/116 0 红 0 红 ✅
G5 编译/产物完整性 353 源 0 错;347/347 XML(采信) 全绿 全绿 ✅
G6 浏览器 E2E 28/28 + 2 skip 100% 可执行 100% ✅
G7 langgraph 51/51 全绿 0 红 0 红(首次全绿) ✅
G8 鉴权 5/5 = 401 100% 100%(admin 面另计 B-142-1) ✅
G9 场景锚点 101/347 ≥ 95% 29.1% ❌
G10 双节点 189 admin 5/5 + 251 pytest 51 例 双节点连通 双节点均实派成功 ✅
G11 CI 全量门禁 .github/workflows = 0 有 无 ❌
G12 SRS 合规 0 新增用例 0 抖动 0 ✅
综合 — — — ⚠️ 有条件通过

通过条件(复评门槛)

  1. G2 清零:后端 17 存量红逐类闭环;根级 16 红需 9082 常驻或改为可跳过的门控用例
  2. G9 提升:SRS 池 795 文档用例脚本化落地,锚点 ≥95%
  3. G11:CI 接入后端全量 + 前端 Jest + 浏览器 E2E
  4. G7 维持:langgraph 连续 2 轮 51/51 后正式销号 B-142-2

6. 五要素问题清单

问题 1 · B-145-1(第 3 轮,P1)nutrition_age_dosage 建表 SQL 无效,表从未创建

  1. 问题描述:后端每次启动 DatabaseInitializer 执行 schema.sql 时,nutrition_age_dosage 建表语句报 SQLSyntaxErrorException: Key column 'product_id' doesn't exist in table,该表在任何环境从未创建成功。本轮为上市后第 3 轮挂账,未见修复提交。
  2. 测试 bug 点:cfc-backend/src/main/resources/schema.sql:5354(INDEX idx_product (product_id)),实体 com.etotem.cfc.entity.NutritionAgeDosage 无 productId 字段。
  3. 最优修改方案:删除该行 INDEX idx_product (product_id);若产品维度确需保留,则补 product_id BIGINT 列 + 实体字段 + 迁移(ensureColumn("nutrition_age_dosage","product_id","BIGINT NULL"))并同步 schema.sql。
  4. 修改目的:让 DDL 可执行、表能被创建,消除「静默跳过建表 → 运行期 500」的隐藏故障面;对应 G5(产物/初始化完整性)。
  5. 能否闭环:能。复测方式:空库执行 mvn -o -B clean test 观察启动段无 SQLSyntaxErrorException,且 SHOW TABLES LIKE 'nutrition_age_dosage' 命中;通过标准 = 启动日志零 DDL 异常 + 相关 Service 用例转绿。

问题 2 · B-142-1(第 6 轮,P1 安全)/api/admin/** 鉴权门缺失

  1. 问题描述:匿名 POST /api/admin/families/overview 返回 HTTP 200(body code:400),请求已穿过 JwtInterceptor 到达控制器;对照组 /api/energy/overview 匿名 401。连续 6 轮复核成立。
  2. 测试 bug 点:cfc-backend/src/main/java/com/etotem/cfc/config/JwtInterceptor.java:105-130(LOGIN_REQUIRED_PATHS 未含 /api/admin/)。
  3. 最优修改方案:LOGIN_REQUIRED_PATHS 增加 /api/admin/ 前缀,并对 admin 族补角色校验(role != admin → 403);补契约用例 AdminAuthGateTest(匿名 → 401/403)。
  4. 修改目的:封堵管理端数据面的未授权访问入口(纵深防御,不依赖单层校验)。
  5. 能否闭环:能。复测方式:§4.6 匿名 POST 期望 401/403;通过标准 = 0 个 200/400 响应 + 新契约用例全绿。

问题 3 · B-142-2(第 6 轮,P0 运维)251 LLM 上游连接故障 —— 本轮红例清零,疑似销号

  1. 问题描述:R139~R146 期间 langgraph 红例由 LLM 上游故障(429 额度 → ConnectError 连接失败)驱动;本轮 51 例全绿、日志零 ConnectError/429/401——上游已恢复,B-142-2 的失败面未再触发。
  2. 测试 bug 点:历史失败点 cfc-langgraph/tests/test_auto_tag.py::test_auto_tag_valid_format|content_relevance;根因日志 middleware.py:113 ... ConnectError(R146)。
  3. 最优修改方案:运维维持 251→LLM 上游链路与额度稳定;测试侧对上游故障增加 pytest.mark.env_skip 显式标注环境跳过,避免「环境红」与「代码红」混同(延续 R146 建议)。
  4. 修改目的:让 G7 的绿具备可判定性与稳定性,防止偶发环境抖动假红。
  5. 能否闭环:能。复测方式:251 复跑 pytest -q --ignore=tests/qna --ignore=tests/test_chat.py;通过标准 = 连续 2 轮 51/51 零 ConnectError/429 → 正式销号 B-142-2(本轮为首轮全绿)。

问题 4 · B-134-4(第 10 轮,P1)intent_classifier 上游故障静默兜底伪装成正常分类

  1. 问题描述:分类失败(429/401/ConnectError)时 intent_classifier.py:62 捕获异常后「默认 chat」,把服务不可用伪装成分类结果;本轮 intent 5/5 全绿(上游恢复)但兜底缺陷仍存在,上游一故障就会假绿。
  2. 测试 bug 点:cfc-langgraph/app/agents/intent_classifier.py:62。
  3. 最优修改方案:兜底改为「显式抛错 + 上游标记」(raise IntentUnavailable 或返回值带 degraded=true),由路由层决定降级;测试侧对 degraded 断言。
  4. 修改目的:消除静默兜底造成的假绿/假红,让 G7 失败可归因。
  5. 能否闭环:能。复测方式:注入 429 桩后跑 test_intent.py;通过标准 = 5/5 断言命中预期语义,不再「默认 chat」。

问题 5 · B-DX-1(第 9 轮,P2 部署)dx-bridge 两端点 404

  1. 问题描述:POST /api/health/data-sources/bridge/list 与 /sync-status 线上恒 404,2 条鉴权契约用例长期 skip,SRS §3.3/§3.4 契约无法验证。
  2. 测试 bug 点:tests/e2e-live/dx-health-bridge-auth.spec.js(TC-DX-U01/U02)。
  3. 最优修改方案:按 TR-24 部署两端点(或明确下线并从 SRS 摘除);端点上线后 skip 分支自动转 401/403 断言(现有实现已支持)。
  4. 修改目的:消除「用例存在但永不执行」的覆盖缺口。
  5. 能否闭环:能。复测方式:npx playwright test -c playwright.config.live.js --project=dx-bridge;通过标准 = 2/2 通过(非 skip)。

问题 6 · B-95(第 18 轮,P2 运维)192.168.16.204:4090 失联

  1. 问题描述:204 节点 4090 端口连续 18 轮 000,无法承担任何派发任务;当前仅 189/251 可用。
  2. 测试 bug 点:无代码缺陷,节点可用性。
  3. 最优修改方案:运维恢复 204 服务或在节点清单中正式退役;测试侧节点清单固化为 189/251(已生效)。
  4. 修改目的:保证「每节点单任务」并发能力与派发拓扑可预期。
  5. 能否闭环:能。复测方式:curl 192.168.16.204:4090 → 200;通过标准 = 节点重新出现在派发清单且实派成功。

问题 7 · B-36(第 43 轮,P3 环境)根级黑盒 16 红

  1. 问题描述:根级 tests/ Jest 23 例中 16 例因 ECONNREFUSED 127.0.0.1:9082 失败——本地后端未常驻,用例属环境门控型。连续 43 轮零漂移。
  2. 测试 bug 点:tests/integration/*.spec.js。
  3. 最优修改方案:加 beforeAll 探活,未启动则 describe.skip 并打印原因(避免计入红例);或在闭环脚本中先拉起 9082。
  4. 修改目的:让「环境未就绪」与「功能失败」在度量上可区分,G2 才有清零可能。
  5. 能否闭环:能。复测方式:cd tests && npx jest;通过标准 = 9082 未启动时 16 例为 skip 而非 fail,启动后 23/23 全绿。

问题 8 · B-138-3(第 5 轮,P3 效率)后端 3 个超慢类

  1. 问题描述:AuthControllerTest / ActivityControllerTest / ArticleControllerTest 三慢类合计占全量大头(R145 实测 13.1min / 1:09h 为前值;R146 全量 44m 仍受此影响)。
  2. 测试 bug 点:上述三类(Spring 上下文重复加载 + 无谓等待)。
  3. 最优修改方案:合并为同一 @SpringBootTest 上下文(@DirtiesContext 复核)、去掉 Thread.sleep、外部 HTTP 调用加超时与桩。
  4. 修改目的:缩短全量反馈周期。
  5. 能否闭环:能。复测方式:跑这 3 类计时;通过标准 = 合计 < 180s 且用例数不减少。

7. 覆盖缺口清单(本轮)

# 缺口类型 现状 风险 建议测试设计 优先级 闭环方式
G-147-1 场景锚点 347 唯一 TC 中仅 101(29.1%) 在代码中可定位 大量 SRS 场景无自动化凭据,回归靠人工 按 SRS 池 795 文档用例逐条挂 TC-* 注释(e2e-live 优先) P1 每轮提升 ≥3pp,达 95% 封板
G-147-2 数据库初始化 nutrition_age_dosage 建表失败(B-145-1,第 3 轮挂账) 新库部署功能缺失且无告警 增加「启动后表清单断言」用例(对比 schema.sql CREATE TABLE 清单与实库) P0 该用例转绿即闭环
G-147-3 性能 未授权压测;仅有单例耗时 无法判断容量与劣化 授权后对 /api/energy/overview 等只读端点做 50 并发 60s 基线 P2 需用户显式授权 execute 档
G-147-4 探索性测试 无 charter 边界问题发现依赖偶发 每轮 30min 时间盒探索,记 charter + 缺陷 P3 台账新增 charter 记录
G-147-5 CI 无 workflow 门禁靠人工,易漏 GitHub Actions:后端 mvn -o -B test + Jest ×3 + Playwright live P1 workflow 合入并跑绿
G-147-6 兼容性/无障碍 仅 Chromium 小程序真机与低端机风险 增加 WebKit + 真机回归;axe 扫描关键页 P3 双引擎全绿 + axe 0 critical

8. 下轮前置(R148)

  1. 运维(P0):维持 251→LLM 上游链路与额度稳定,确保 langgraph 51/51 可复现(B-142-2 首轮清零,待第 2 轮复验后正式销号)
  2. 研发(P0):修 schema.sql:5354 无效索引(B-145-1,第 3 轮),并补「表清单一致性」启动断言
  3. 研发(P1):/api/admin/ 纳入 LOGIN_REQUIRED_PATHS + admin 角色校验(B-142-1 第 6 轮)
  4. 研发(P1):intent_classifier 兜底改显式降级标记(B-134-4 第 10 轮)
  5. 部署(P2):dx 两端点上线(B-DX-1 第 9 轮);204 节点恢复或退役(B-95 第 18 轮)
  6. 测试(P1):根级黑盒加探活 skip(B-36),使 G2 可清零;SRS 池锚点脚本化(G-147-1)+ CI 接入(G-147-5)

9. 变更触发与推送(结果有变)

  • 判定:langgraph 由 R146 的 2 红降至 0 红(51/51 首次全绿)、全量通过率 98.52%→98.57% → 测试结果实质变化,触发用户规则「结果有变化时提交远程并通知研发」。
  • 执行:git add docs/tdd/** tests/e2e/_automation_reachability_result.json → commit → git push origin cfclub(push 前先 fetch;远端已含 7f4e61dee/c21934790,rebase 或 fast-forward 对齐后再推)。
  • 定性:36 红零产品代码回归(后端 17 红与 R146 逐类逐例一致;langgraph 0 红;根级 16 红为 9082 未常驻;前端 3 红为已登记预期 RED)。
  • 通知通道:Agent Mail 仍未开通 → 以 notice-2026-11-11-R147-研发通知.md + blockers.md + 推送为通知载体。

10. 教训沉淀

  • langgraph 上游故障存在「自动恢复」窗口,红例清零≠修复落地——须复验确认后再销号:R146 尚 2 红(ConnectError),R147 即 51/51 全绿、日志零故障——上游连接是易变因素;按既定纪律,B-142-2 不立即销号,待连续 2 轮全绿后再正式销号,避免把「环境抖动」误记为「修复完成」。
  • 51 例全绿轮仍保留 LG_EXIT=124 管道噪音:timeout 650 ... | tee | tail 形态下,pytest 已完整打印 51 passed 汇总后 shell 侧才报 124——判据以 pytest 汇总行为准,EXIT 仅作参考(R139/143 同款)。
  • 零源码变更窗口 = 实跑与采信的合理边界:后端 44m 全量在 R146 已实跑、窗口零 diff,本轮采信;浏览器/langgraph/Jest 均轻量(<9min)全部实跑——平衡证据新鲜度与轮次耗时。
  • 窗口基线比对要用 origin 而非 HEAD:本轮 HEAD 停在 df4c2ab45 但 origin 已推进(bump + 研发汇报),fetch 后明确「窗口仅版本号 + docs」才能放心比较结论。

测试负责人:cfc-tester · 2026-11-11 第 147 轮闭环