|
|
@@ -0,0 +1,234 @@
|
|
|
+# 测试负责人工作汇报 · 第 135 轮(2026-11-11 03:45 GMT+8,本自动化触发)
|
|
|
+
|
|
|
+> 执行档:**review(内网 cfc.iwintrue.com/admin + /frontend 浏览器自动化已授权;langgraph@251 实派;未联网装依赖、未启停服务、未改生产代码)**
|
|
|
+> 基线 HEAD:`8f2d1fe97`(R134 闭环)→ 远端 `6c2fdef98`(仅 bump/研发汇报,R134 后**源码零变更**)→ **本轮 langgraph 于 251 侧以 `e3f80f683` 实跑**
|
|
|
+> 节点:`251:9000`=404(在线无 content)|`251:4096`=200(opencode 在线,本轮实派 2 轮)|`189:4090`=200(本轮未派发浏览器,单节点串行纪律)|`204:4090`=000(B-95 第 9 轮)|`9082`=000(B-36 第 34 轮)
|
|
|
+> 分工:**本机**=浏览器全套(admin 5 + fe 6 + shop 4 + health 13)+ Jest(web/fe/根级)|**251**=langgraph pytest(实派 43 例)
|
|
|
+> 结论:⛔ **不通过(有条件)** — 三项历史红线未变(G2/G9/G11);**本轮结果有变化**:① 前端 **0→16 红**,全部定性为**预期 RED 契约态**(研发 01:30–02:33 合入的 S-cfc-30/52/53 契约测试引用组件未交付),非回归;② langgraph 实测 **43 例 / 39 过 / 4 红**(较 R134 红例 7→4,全部为 401/429 环境,非回归;R134 的 51 例口径当前无法复现);③ 浏览器 **28/28** 稳、web 116/116 稳。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 1. 历史审查记录(仅作对照,不作为本轮结论依据)
|
|
|
+
|
|
|
+| 轮次 | 时间 | 后端全量 | langgraph@251 | 浏览器 | 前端 Jest | 结论 |
|
|
|
+|---|---|---|---|---|---|---|
|
|
|
+| R132 | 11-10 夜 | 沿用 R130(2865 例 / 33 红,零部署) | 33 绿 / 10 环境阻塞(43 例) | 28/28 | 0 红 | 不通过(有条件) |
|
|
|
+| R133 | 11-11 01:16 | 沿用 R130 | 33 绿 / 10 环境阻塞(43 例) | 28/28 | 0 红 | 不通过(有条件) |
|
|
|
+| R134 | 11-11 02:10 | **343 类 / 2918 例 / 17 红 = 99.28%** | 44 绿 / 7 红(环境)/ **51 例** | 28/28 | **0 红 / 472 过 / 3 跳** | 不通过(有条件) |
|
|
|
+| **R135(本轮)** | 11-11 03:45 | 采信 R134(源码零变更) | **39 过 / 4 红(全环境)/ 43 例** | **28/28** | ⚠️ **16 红 / 9 跳 / 557 过 / 582 总**(16 红全预期 RED) | **不通过(有条件)** |
|
|
|
+
|
|
|
+- 与 R134 对比的三处实质变化:
|
|
|
+ 1. **前端 Jest 0→16 红**:3 套件失败(`signature.healthPlan` / `signature.consignee` / `growthHistory.view`),全部为研发新合入的 RED 契约测试引用**未交付组件**(`health-plan-summary.vue` / `consignee-edit.vue` 不存在、`growth-main/index.vue` 无按日期分组逻辑);测试注释自证「尚未落地 → 预期 RED」。总用例 472→582(+107,新契约合入)。
|
|
|
+ 2. **langgraph 43 例 / 4 红(全环境)**:251 侧当前 HEAD `e3f80f683` 收集口径与 R130-133 一致(43 例);R134 的 51 例在当前基线无法复现,属当时 251 快照差异。红例 7→4 为 **429 配额窗口抖动改善**(intent 红 4→1,仅 `classify_recommend` 命中限流;auto_tag 红 `valid_format` 为当时命中限流所致)。
|
|
|
+ 3. **浏览器 28/28 与 web 116/116 零漂移**;根级黑盒 7/16 与 R134 零漂移(B-36 第 34 轮)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 2. 项目画像速览
|
|
|
+
|
|
|
+- **业务**:浠艾福 XAF —— 家庭教育 SaaS(家庭成员 / 五维能量 / 成长规划师 / 健康报告解析 / 商城分佣 / AI 管家 / 知识中心)。
|
|
|
+- **技术栈**:`cfc-backend`(Spring Boot 2.7.18 + MyBatis-Plus + Java 8,9082)· `cfc-web`(Vue2 + ElementUI,8082)· `cfc-frontend`(uni-app H5/小程序)· `cfc-langgraph`(FastAPI + LangGraph + Chroma,9000,部署 192.168.16.251)· `dan/danshop`(独立商城 8888)。
|
|
|
+- **关键路径**:登录/家庭邀请 → 五维测评 → 成长任务审批 → 健康报告上传解析 → 商城下单分佣 → AI 对话 → 知识中心标签筛选(S-cfc-131)→ 食材推荐/今日食谱(新增 PRD 2026-11-10,测试资产已由研发 181e830be 合入)。
|
|
|
+- **测试现状**:后端 343 类 / 2918 例(采信 R134);前端 Jest 37 套件 / 582 例(16 红预期 RED);管理端 Jest 17 套件 / 116 例;浏览器 live 28 例;langgraph 43 例(本轮 251 实派);根级黑盒 23 例。
|
|
|
+- **质量目标**:20 类全覆盖、G1≥95%、G2≤10 红、G6 28/28、G7 0 红、G9≥80%。
|
|
|
+- **风险点**:后端 17 红(产品/契约待裁决:EnergySystem 6×500、DimensionRegistryMap 3、Orchestration 2、WechatLogin 2、MembershipPay/PaymentORD/TeamProfitCron 各 1);前端 16 红为**实现未交付的预期 RED**(待研发交付组件即转绿);langgraph 凭据 401 + 配额 429 未解(B-74 / B-134-4 → 本轮延续 6 例环境红)。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 3. 20 类测试覆盖矩阵(三态:已实测 / 未发现 / 待核实)
|
|
|
+
|
|
|
+| # | 测试类型 | 状态 | 证据 |
|
|
|
+|---|---|---|---|
|
|
|
+| 1 | 单元测试 | ✅ 已实测 | 后端 2918 例(采信 R134);web 116;fe 582(其中 16 例预期 RED 契约) |
|
|
|
+| 2 | 组件测试 | ✅ 已实测 | Vue shallowMount 组件用例(fe 37 套件 / web 17 套件) |
|
|
|
+| 3 | 接口 API 测试 | ✅ 已实测 | 后端控制器 MockMvc/直调;ArticleTagFilterContractTest 10/10(R134);diet 契约新合入 536 行 |
|
|
|
+| 4 | 集成测试 | ✅ 已实测 | `integration.*` 实跑(R134:GrowthRecordSync 10/10 等) |
|
|
|
+| 5 | 系统/端到端 E2E | ✅ 已实测 | 浏览器 live **28/28**(本机串行 workers=1) |
|
|
|
+| 6 | 冒烟测试 | ✅ 已实测 | 浏览器 28 例 + Jest 698 例体现冒烟面 |
|
|
|
+| 7 | 回归测试 | ✅ 已实测 | 浏览器 28/28、web 116/116、根级零漂移;前端 16 红定性非回归(预期 RED) |
|
|
|
+| 8 | 探索性测试 | ⚠️ 待核实 | — |
|
|
|
+| 9 | 验收 UAT / BDD | ⚠️ 待核实 | 无 cucumber/gherkin 执行证据 |
|
|
|
+| 10 | 性能测试 | ⛔ 未授权未执行 | 压测需联网授权 |
|
|
|
+| 11 | 可靠性测试 | ⚠️ 待核实 | 本轮新增可观测项:langgraph pytest 收尾挂起(EXIT=124,见 G-135-5) |
|
|
|
+| 12 | 安全测试(SAST/DAST/SCA/渗透) | ⛔ 未授权未执行 | 仅静态项 + 鉴权契约 |
|
|
|
+| 13 | 兼容性测试 | ⚠️ 待核实 | 仅 Chromium 单浏览器 |
|
|
|
+| 14 | 可用性测试 | ⚠️ 待核实 | 无真实用户可用性证据 |
|
|
|
+| 15 | 无障碍测试 | ⚠️ 待核实 | 无 axe/WCAG 扫描 |
|
|
|
+| 16 | 覆盖率度量 | ⚠️ 已实测(低) | web 语句 10.09% / 分支 6.12% / 函数 7.50% / 行 9.97%(沿用 R130);后端 JaCoCo 未接入 |
|
|
|
+| 17 | 变异测试 | ⛔ 未发现 | 无 PIT / mutation 资产 |
|
|
|
+| 18 | 契约测试 | ✅ 已实测 | health 鉴权 13/13 + shop 排序 4/4 + article 标签 10/10(R134)+ 新合入 S-cfc-29~54 契约(其中 6 例预期 RED) |
|
|
|
+| 19 | QA 流程 | ⚠️ 待核实 | 135 轮闭环可追溯;门禁未脚本化(G11) |
|
|
|
+| 20 | 全项目代码审查 | ⚠️ 待核实 | 仅规范扫描 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 4. 实测结果明细(本轮真实信号)
|
|
|
+
|
|
|
+### 4.1 浏览器 live(本机,workers=1 串行)
|
|
|
+
|
|
|
+| 项目 | 结果 |
|
|
|
+|---|---|
|
|
|
+| frontend-mobile(375×812) | ✅ 6/6 |
|
|
|
+| shop-api(排序契约) | ✅ 4/4 |
|
|
|
+| admin-desktop(1440×900) | ✅ 5/5 |
|
|
|
+| health-contract(鉴权) | ✅ 13/13 |
|
|
|
+| **合计(G6)** | **✅ 28/28**(与 R134 一致;`.live-artifacts/.last-run.json` status=passed / failedTests=[]) |
|
|
|
+
|
|
|
+### 4.2 Jest(本机)
|
|
|
+
|
|
|
+| 套件 | 命令 | 结果 |
|
|
|
+|---|---|---|
|
|
|
+| cfc-frontend | `npx jest --ci` | ⚠️ **3 套件失败 / 34 过;16 红 / 9 跳 / 557 过 / 582 总**(29.3s) |
|
|
|
+| cfc-web | `npx jest --ci` | ✅ 17 套件 / 116 过 / 0 红(40.2s) |
|
|
|
+| 根级黑盒 | `npx jest -c tests/jest.config.js --ci` | ⚠️ 7 过 / 16 红(全 `ECONNREFUSED 127.0.0.1:9082`,B-36 第 34 轮零漂移) |
|
|
|
+
|
|
|
+### 4.3 前端 16 红根因(全部预期 RED 契约态,非回归)
|
|
|
+
|
|
|
+| 失败套件 | 引用组件 | 事实 | 契约键 |
|
|
|
+|---|---|---|---|
|
|
|
+| `signature/signature.healthPlan.test.js` | `pages/signature/components/health-plan-summary.vue` | `git ls-files pages/signature/components/` 仅 `hand-signature.vue` → 组件不存在 | S-cfc-52 |
|
|
|
+| `signature/signature.consignee.test.js` | `pages/signature/components/consignee-edit.vue` | 测试注释明示「尚未落地(实现未交付)→ 预期 RED」 | S-cfc-53 |
|
|
|
+| `growth-main/growthHistory.view.test.js` | `growth-main/index.vue` | 无按日期分组逻辑(正则 `dateGroups|groupedRecords` 未命中、script 无 `groupByDate` 等) | S-cfc-30 |
|
|
|
+
|
|
|
+- 合入窗口:01:30–02:33(`91711edfa` / `584e0a0b2` / `d6de1eba0` / `26380e100` / `d91095be5` 等 14 个测试文件 +2502 行)。
|
|
|
+- 处置:**不改测试、不降级**;维护 RED 契约等待研发交付组件(TDD 正常态),门禁中如实标注「预期 RED」。
|
|
|
+
|
|
|
+### 4.4 后端全量(采信 R134 权威基线,原因见下)
|
|
|
+
|
|
|
+- **343 类 / 2918 例 / 2897 过 / 17 红 = 99.28%**(R134 实跑 56:53,BUILD FAILURE 仅测试红)。
|
|
|
+- **采信依据**:`git diff 8f2d1fe97..6c2fdef98 -- cfc-langgraph` 空(langgraph 零变更);`8f2d1fe97..origin/cfclub` 仅 bump(cfc-web 5 文件)+ 研发汇报,**后端 src 零变更** → 按采信纪律沿用 R134 权威全量,不重复跑。
|
|
|
+- 17 红集合(承袭):`EnergySystemFlowTest` 6 + `DimensionRegistryMapContractTest` 3 + `GuideModuleIntegrationTest` 1E + `OrchestrationEngineTest` 1 + `OrchestrationIntegrationTest` 1 + `MembershipPaySwitchTest` 1 + `PaymentServiceORDRoutingTest` 1 + `UserServiceWechatLoginTest` 1 + `UserServiceWechatLoginContractTest` 1 + `TeamProfitCronContractTest` 1。
|
|
|
+
|
|
|
+### 4.5 langgraph@251(本轮实派)
|
|
|
+
|
|
|
+- **39 过 / 4 红 / 43 例**(147.04s,`--ignore=tests/qna --ignore=tests/test_chat.py`);251 侧 HEAD=`e3f80f683`。
|
|
|
+- 4 红全部环境(非回归):
|
|
|
+ - `test_auto_tag_valid_format`:`标签数量应为 3-5 个` 且 len([])=0 → LLM 返回空标签(401 记忆召回失败 `****ab12 invalid` + 429);
|
|
|
+ - `test_auto_tag_content_relevance` / `test_auto_tag_short_content`:`chat 端点返回 500` ← 429 RateLimit(AgnesAI free quota);
|
|
|
+ - `test_intent_classify_recommend`:`assert chat == recommend` ← `intent_classifier.py:62` 捕获 429 后默认 chat。
|
|
|
+- **口径说明**:本轮收集 43 例与 R130-133 一致;R134 记录的 51 例在当前 251 快照无法复现——不影响本轮结论(红例 7→4 为配额抖动改善,无新增产品红)。
|
|
|
+- **新增可观测项(G-135-5)**:pytest 主流程 147s 已完成(summary 完整打印),但进程收尾不退出,`timeout 650` 于 ~653s 强杀 → `EXIT=124`;疑似 `JavaClient._get_client` 协程未 await(RuntimeWarning)或 Chroma/线程非守护挂起。将使派发任务虚耗时 ~500s/轮。建议排查非守护线程/协程后连跑 2 轮验证。
|
|
|
+
|
|
|
+### 4.6 主口径合计(本轮实测面)
|
|
|
+
|
|
|
+**3720 例 / 3654 过 / 53 红 / 13 skip = 98.23%(剔 skip 98.57%)**
|
|
|
+= 后端 2918(2897 过 / 17 红 / 4 skip)+ 契约 10(全绿)+ web 116 + fe 582(557 过 / 16 红[预期 RED] / 9 跳)+ 根级 23(7 过 / 16 红)+ langgraph 43(39 过 / 4 红)+ 浏览器 28。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 5. 本轮测试侧闭环明细
|
|
|
+
|
|
|
+| # | 事项 | 类型 | 说明 |
|
|
|
+|---|---|---|---|
|
|
|
+| 1 | 前端 16 红定性 | 判定 | 3 套件失败全部为预期 RED 契约态(实现未交付)→ 不改测试、不误报回归 |
|
|
|
+| 2 | langgraph 口径校准 | 取证 | 251 实派 43 例与 R130-133 一致;红例 4 全环境;R134 51 例无法复现(快照差异),已在 §4.5 说明 |
|
|
|
+| 3 | SRS 变更 → 用例同步(G12) | 核验 | 新 PRD《2026-11-10-食材推荐食谱需求变更》8.3 指定「需新增 `DietRecommendationServiceTest`」→ **已存在**(181e830be 合入 536 行,覆盖 D(N) 菜数公式 / S=1 / T=D+1 / view_key 隔离 / 删除 status 不变 / regenerate 不 insert / 共餐人口径 / 降级菜单)✅;前端 `recommendation.viewKeyAndDelete.test.js`(494 行)+ `recommendation.pagination.test.js`(291 行)同步合入 ✅ |
|
|
|
+| 4 | 需求文档回链附录 | 补录 | 8 个需求变更文档已加「场景与用例回链」附录(2026-11-10 测试侧补录,113 行),随 R135 提交 |
|
|
|
+| 5 | 浏览器/web 零漂移 | 回归 | 28/28、116/116 与 R134 逐字段一致 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 6. 覆盖缺口清单
|
|
|
+
|
|
|
+| # | 缺口类型 | 现状 | 风险 | 建议测试设计 | 优先级 | 闭环方式 |
|
|
|
+|---|---|---|---|---|---|---|
|
|
|
+| G-135-1 | 后端 17 红(产品/契约) | EnergySystem 6×500、Orchestration 2、WechatLogin 2、MembershipPay/PaymentORD/TeamProfitCron 各 1、DimensionRegistryMap 3、platform_fee 截断 | 真回归被淹没在固定红里 | 按类分批:产品类交研发修;P-9 由研发拍板口径后二选一改用例 | P0 | 研发修完复跑该类 + 全量,连 2 轮绿销号 |
|
|
|
+| G-135-2 | langgraph LLM 链路 | 251 凭据 401(`****ab12`)+ AgnesAI 免费额度 429;`intent_classifier.py:62` 兜底成 chat | 配额/凭据故障被误读为分类缺陷 | LLM 依赖用例标 `@pytest.mark.llm` 拆非门禁套件;429/401 抛外部服务异常 | P0 | 运维换 Token + 研发改兜底语义后连跑 2 轮 |
|
|
|
+| G-135-3 | 前端 16 红(预期 RED) | S-cfc-30/52/53 契约测试已合入,实现组件未交付 | 契约长期悬置占红 | 研发按契约交付 `health-plan-summary.vue` / `consignee-edit.vue` / `growth-main` 分组逻辑 | P0 | 组件合入后前端 jest 连 2 轮全绿 |
|
|
|
+| G-135-4 | CI 全量门禁 + 锚点率(G9/G11) | TC 唯一编号锚点约 10%;无 CI 全量 job | 回归无法自动拦截、用例→代码追溯弱 | 固化锚点口径 + 落地 CI(需联网建管道,未授权) | P1/P2 | 研发/运维建 pipeline |
|
|
|
+| G-135-5 | langgraph pytest 收尾挂起 | 主流程 147s 后进程不退出,timeout 650 强杀 EXIT=124 | 派发虚耗 ~500s/轮、shell 易丢失 | 排查 `JavaClient._get_client` 协程未 await / 非守护线程;加 `-p no:cacheprovider` | P1 | 251 侧修复后连跑 2 轮验证 |
|
|
|
+| G-135-6 | 二节点浏览器冗余 | 189 未派发(dispatch 器 Windows 兼容,承袭 G-134-6) | 缺第二节点冗余证据 | 派发器补 `Get-Content` 分支 | P2 | 双平台支持后复跑 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 7. 域结论表
|
|
|
+
|
|
|
+| 审查维度 | 负责专家 | 结论 | 关键证据 |
|
|
|
+|---|---|---|---|
|
|
|
+| 单元·组件级 | 苏雅 | ⚠️ 有变化但非回归 | fe 16 红全为预期 RED 契约态(S-cfc-30/52/53 实现未交付);web 116 全绿;后端采信 R134 17 红 |
|
|
|
+| 集成·接口级 | 柯砚 | ✅ 有推进 | diet 契约新合入 536 行 + viewKeyAndDelete 494 行 + pagination 291 行;article 标签 10/10(R134) |
|
|
|
+| 系统·验收级 | 白樾 | ✅ 绿 | 浏览器 live 28/28(admin 5 / fe 6 / shop 4 / health 13);UAT/BDD 证据仍缺 |
|
|
|
+| 测试保障级 | 闻朔 | ✅ 定性准确 | 16 红根因取证(组件缺失)完整;浏览器/web/根级零漂移 |
|
|
|
+| 性能·可靠性 | 骆骋 | ⚠️ 新发现 | langgraph pytest 收尾挂起 EXIT=124(G-135-5);压测未授权未执行 |
|
|
|
+| 安全 | 关屿 | ⚠️ 静态趋稳 / 动态缺失 | 鉴权契约 13/13;SAST/DAST/SCA 未授权 |
|
|
|
+| 兼容·体验 | 阮清 | ⚠️ 待核实 | 单 Chromium;无可用性/无障碍证据 |
|
|
|
+| 流程·度量·代码 | 何序 | ⚠️ 有缺口 | 锚点约 10%、无 CI;用例更新纪律达标(G12) |
|
|
|
+| **langgraph 专项(251)** | **陆谨汇总** | ⚠️ 环境红 4 | 43 例 / 39 过;红例全为 401 凭据 + 429 配额(非回归,较 R134 红例 7→4 改善) |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 8. 五要素问题清单
|
|
|
+
|
|
|
+### 问题 1 · 前端契约测试引用未交付组件致 16 红(预期 RED,持续盯办)
|
|
|
+- **① 问题描述**:`cfc-frontend` jest 由 R134 的 0 红变为 16 红,3 套件失败,表象像回归。
|
|
|
+- **② 测试 bug 点**:非测试 bug。`signature.healthPlan.test.js` / `signature.consignee.test.js` / `growthHistory.view.test.js` 为研发按 S-cfc-30/52/53 合入的**契约级测试**,断言组件文件存在性与按日期分组逻辑;但实现组件 `health-plan-summary.vue` / `consignee-edit.vue` 尚未交付(`git ls-files pages/signature/components/` 仅 `hand-signature.vue`),`growth-main/index.vue` 亦无分组逻辑。
|
|
|
+- **③ 最优修改方案**:研发按契约交付:① 新建 `consignee-edit.vue`(收件人编辑组件);② 新建 `health-plan-summary.vue`(健康计划摘要组件);③ `growth-main/index.vue` 增加按日期分组渲染逻辑(`dateGroups`/`groupByDate`)。**测试零修改**。
|
|
|
+- **④ 修改目的**:TDD 正常 RED→GREEN 推进;契约先行、实现跟进,防止实现驸离规格。
|
|
|
+- **⑤ 闭环验证**:组件合入后 `npx jest --ci` 在 cfc-frontend 连 2 轮 0 红即销号(G-135-3 / B-135-1)。
|
|
|
+
|
|
|
+### 问题 2 · langgraph LLM 用例红为凭据 401 + 配额 429(待研发/运维)
|
|
|
+- **① 问题描述**:251 实派 43 例中 4 红(auto_tag 3 + intent 1)。
|
|
|
+- **② 测试 bug 点**:非测试 bug;`app/agents/intent_classifier.py:62` 捕获异常后默认 chat,把 429 伪装成分类错误(吞错点)。
|
|
|
+- **③ 最优修改方案**:运维换有效 Token(当前 `****ab12` 401);研发将 429/401 抛 `ExternalServiceError` 而非回落 chat;LLM 依赖用例加 `@pytest.mark.llm` 并从门禁套件剔除。
|
|
|
+- **④ 修改目的**:让「分类错误」与「上游不可用」可区分,避免红线误判产品回归。
|
|
|
+- **⑤ 闭环验证**:换 Token 后 251 连跑 2 轮 43/43 绿即销号(B-74 / B-134-4 延续)。
|
|
|
+
|
|
|
+### 问题 3 · R134 langgraph 51 例口径与本轮 43 例不一致(取证澄清)
|
|
|
+- **① 问题描述**:R134 记录「51 例 / 44 绿 / 7 红」,本轮同命令收集仅 43 例。
|
|
|
+- **② 测试 bug 点**:非测试 bug;251 侧本轮 `git reset --hard origin/cfclub` 后 HEAD=`e3f80f683`,收集 43 例与 R130-133 一致。51 例疑为 R134 时 251 快照含额外测试文件(如当时未 ignore 的 qna/test_chat 或历史遗留),当前基线无法复现。
|
|
|
+- **③ 最优修改方案**:以本轮 43 例为基准口径固定;如研发需复核 R134 数字,可在 251 以当时 sha 复跑并回帖结论。
|
|
|
+- **④ 修改目的**:校准 langgraph 口径,杜绝 51/43 混用导致的误判。
|
|
|
+- **⑤ 闭环验证**:连跑 2 轮收集数稳定为 43 即口径成立。
|
|
|
+
|
|
|
+### 问题 4 · langgraph pytest 收尾挂起致 timeout 强杀 EXIT=124(新发现)
|
|
|
+- **① 问题描述**:pytest 147.04s 打印完整 summary 后进程不退出,`timeout 650` 至 ~653s 强杀,shell 输出 EXIT=124。
|
|
|
+- **② 测试 bug 点**:疑似并发协程/线程未 join:`RuntimeWarning: coroutine 'JavaClient._get_client' was never awaited`;Chroma 客户端线程或 FastAPI 事件循环未关闭。
|
|
|
+- **③ 最优修改方案**:排查 `tests/conftest.py` 与 `app` 侧非守护线程/未 await 协程;测试侧加 `-p no:cacheprovider` 与显式 shutdown fixture。
|
|
|
+- **④ 修改目的**:派发任务不再虚耗 ~500s、shell 不易被服务端回收丢失(本轮首轮派发即因此丢结果)。
|
|
|
+- **⑤ 闭环验证**:251 连跑 2 轮均在 ≤200s 内退出且 EXIT=0/1 即闭环。
|
|
|
+
|
|
|
+### 问题 5 · SRS 变更触发测试资产已就位(G12 达标核验)
|
|
|
+- **① 问题描述**:新 PRD《2026-11-10-食材推荐食谱需求变更》属 SRS 变更,须确认测试用例已更新。
|
|
|
+- **② 测试 bug 点**:无 bug;核验结论为**已达标**——PRD 8.3 指定「需新增 `DietRecommendationServiceTest`(本次必需)」,实际已由研发 181e830be 合入 536 行(5 类覆盖:菜数公式 / normalizeMenu 补齐截断 / 降级菜单 / generate|regenerate 三路径 / view_key 隔离 / update 删除 status 不变),前端 viewKeyAndDelete 494 行 + pagination 291 行同步合入。
|
|
|
+- **③ 最优修改方案**:无需修改;后续研发实现交付后跑该模块回归(现有 recommendation.*.test.js 覆盖)。
|
|
|
+- **④ 修改目的**:确保 SRS 变更→用例同步链路闭环。
|
|
|
+- **⑤ 闭环验证**:181e830be 在基线链内且 8.3 指定测试齐全 → G12 ✅。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 9. 门禁结论
|
|
|
+
|
|
|
+| 门禁 | 指标 | 阈值 | 本轮 | 判定 |
|
|
|
+|---|---|---|---|---|
|
|
|
+| G1 | 主口径通过率 | ≥95% | 98.23%(3654/3720;剔 skip 98.57%) | ✅ |
|
|
|
+| G2 | 红例数 | ≤10 | 53(后端 17 + 根级 16 + 前端 16[预期 RED] + langgraph 4) | ❌ |
|
|
|
+| G3 | cfc-web Jest | 全绿 | 116/116 | ✅ |
|
|
|
+| G4 | cfc-frontend Jest | 全绿 | **16 红(预期 RED)/ 9 跳 / 557 过** | ❌ |
|
|
|
+| G5 | 编译 + XML 完整性 | 0 错 / 无沉默 | 编译 0 错 / 343 类无沉默(采信 R134) | ✅ |
|
|
|
+| G6 | 浏览器 live | 28/28 | 28/28 | ✅ |
|
|
|
+| G7 | langgraph | 0 红 | 39/43(4 全环境 401/429) | ❌ |
|
|
|
+| G8 | 鉴权契约 | 全 401/403 | 13/13 | ✅ |
|
|
|
+| G9 | SRS/TC 锚点率 | ≥80% | ≈10% | ❌ |
|
|
|
+| G10 | 节点分派 | 251 + 浏览器节点 | 251 ✅ / 189 未派发 | ⚠️ |
|
|
|
+| G11 | CI 全量门禁 | 存在 | 无 | ❌ |
|
|
|
+| G12 | SRS 变更→用例同步 | 合规 | 合规(食材推荐 PRD 指定测试已合入 536+494+291 行) | ✅ |
|
|
|
+
|
|
|
+**总裁决:⛔ 不通过(有条件)** —— G2/G4/G7/G9/G11 未达标;G4 的 16 红与 G7 的 4 红**全部为预期 RED 契约态 / 环境红(401+429)**,均非回归;G2 中 36/53 红属环境或预期 RED。本轮属**方向性观察轮**:无新回归、口径校准(langgraph 43 例)、SRS 变更用例已同步。
|
|
|
+**复评条件**:① 研发交付 S-cfc-30/52/53 组件使前端 16 红转绿;② 251 换 Token + 429 配额恢复使 langgraph 43/43;③ 后端 17 红按批修复或口径裁决;④ CI 落地全量 job + TC 锚点补齐。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 10. 附录 · 本轮命令
|
|
|
+
|
|
|
+```bash
|
|
|
+# 浏览器(必须在 tests/ 目录内,B-52)
|
|
|
+cd tests && npx playwright test -c playwright.config.live.js --project=frontend-mobile --project=shop-api
|
|
|
+npx playwright test -c playwright.config.health.js
|
|
|
+npx playwright test -c playwright.config.live.js --project=admin-desktop
|
|
|
+# 前端/管理端/根级
|
|
|
+cd cfc-frontend && npx jest --ci ; cd ../cfc-web && npx jest --ci ; cd .. && npx jest -c tests/jest.config.js --ci
|
|
|
+# langgraph(251 实派,本轮 dispatch_251_shell_v2.cjs;首轮 shell 丢失,次轮成功 43 例)
|
|
|
+OPENCODE_SERVER_PASSWORD=... node docs/tdd/tools/dispatch_251_shell_v2.cjs
|
|
|
+# 251 只读取证(collect-only + HEAD)
|
|
|
+node /tmp/r135_collect.cjs
|
|
|
+```
|