执行档: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 全量
| 轮次 | 时间 | 后端全量 | 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 |
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。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)。| # | 测试类型 | 状态 | 证据 |
|---|---|---|---|
| 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),未跑全量静态审查 |
| # | 维度 | 命令/方式 | 节点 | 结果 |
|---|---|---|---|---|
| 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)
| 缺口 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
|---|---|---|---|---|---|
| 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 例绿 |
| 审查维度 | 负责专家 | 结论 | 关键证据 |
|---|---|---|---|
| 单元·组件级 | 苏雅 | 不通过(局部) | 后端 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 口径未归一 |
test_auto_tag 4 例 + test_intent 4 例红 — B-74 复发第 3 次(本轮新增)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。cfc-langgraph/tests/test_auto_tag.py:93/141、cfc-langgraph/tests/test_intent.py:16/23/30/37(断言直接依赖真实 LLM 输出)。@pytest.mark.llm 冒烟集;③ 对 ConnectError 加显式超时+重试+降级断言。pytest -m "not llm" 全绿(离线稳定)+ pytest -m llm 43/43 连绿 2 轮;B-74 连续 2 轮无复现后销号。settle_* 8 例报 cfBalanceService.earnByRule(...) / ppointConsumptionLogMapper.insert(...) 未被调用(提前 return 后断言不成立)。cfc-backend/src/test/java/com/etotem/cfc/service/CfCommissionServiceSettleTest.java(8 个 settle_* 方法)。ArgumentCaptor 校验实付/基数/档位。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。:164/:204 NPE;:130 期望 true 得 false。integration/GrowthRecordSyncFlowTest.java:130/164/204。getXxxByFamilyMember mock 返回;布尔用例改断言业务码/message。applyAndActivate_无active实例时新建并置active 期望 100 得 null。unit/TaskPlanServiceTest.java。doAnswer 回填主键或 ArgumentCaptor 校验保存对象。parentGetsEnergyOverview 等 4 例期望 200 得 500;childExchangesWithInsufficientEnergy_Fails 得 false;userWithoutFamily_Fails 得 5001。integration/EnergySystemFlowTest.java:116/150/182/212/246/282。Caused by,对照 /api/energy/* 的成员解析;5001 若为设计错误码写入契约。/api/energy/overview 带 token 返 200。orchestration/OrchestrationEngineTest.java:176、OrchestrationIntegrationTest.java:105。service/UserServiceWechatLoginTest.java、UserServiceWechatLoginContractTest.java:110、MembershipPaySwitchTest.java:209、PaymentServiceORDRoutingTest.java:83。refundWithinCooling_cancelAllRecordsFundsNotPaid 断言 cancelled=0 应为 true。unit/TeamProfitCronContractTest.java。integration/controller/DimensionRegistryMapContractTest.java:76/85/92。@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 预检。grep -c @GetMapping=0;gitleaks 0 命中。| 指标 | 数值 | 环比 |
|---|---|---|
| 测试类(后端) | 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 | 未整改 |
| 门禁 | 判据 | 实测 | 结论 |
|---|---|---|---|
| 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 零变更 → 不新增(合规) | ✅ |
总裁决:不通过(有条件)
401 api key invalid + 429 free-tier rate limit + ConnectError → LLM 凭据/配额击穿,非代码回归(源码零提交)。git status --porcelain 已跟踪改动 0)。workers:1)。变化点(相对 R128):
test_auto_tag 4 + test_intent 4,根因 LLM 凭据 401 + 429 限流 → B-74 复发第 3 次(P0)。提交流程: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 文件 + 提交消息传递):
.env 的 API key ****ab12 已失效(401),且 free tier 配额耗尽(429)。需运维轮换有效 key + 提升配额;否则 AI 对话/意图分类/自动打标在真实用户侧不可用。@pytest.mark.llm 冒烟。