|
|
@@ -0,0 +1,155 @@
|
|
|
+# 全栈测试执行记录 · R98(2026-11-09 07:50 起跑)
|
|
|
+
|
|
|
+> 自动化闭环第 98 轮。执行档:**review(离线)**——未联网装依赖、未启停任何服务、未修改生产代码;仅修改/新增测试侧装置(`tests/e2e-live/`、`.tdd/dispatch_251_langgraph_r98b.py`)。
|
|
|
+> 汇报正文:`docs/tdd/orchestration/report-test-2026-11-09-0820.md`;台账:`docs/tdd/test/blockers.md`。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 一、历史审查记录
|
|
|
+
|
|
|
+| 项 | 内容 |
|
|
|
+|---|---|
|
|
|
+| 上次审查 | R97(2026-11-09 06:10),结论**不通过** |
|
|
|
+| R97 遗留 | 后端 2802/143 红(94 预期 RED + 37 A 类 + 12 B 类)、前端 49 红(预期 RED)、langgraph 251 43/33/10、浏览器 15/15+13/13、B-61/B-65/B-69/B-84/B-86/B-87 等 |
|
|
|
+| 本次改善 | ①**B-61 闭环**(P0 鉴权回归转绿);②**契约大幅转绿**(7 类全绿:NoPathMap/KbVersionSense/StrainBlock/ShellGuard/PageTailClean/GateLowSideRedline/KbFieldExpose);③**签名 v2 实现验证通过**(feature 分支 11/11 全绿复验);④**EvidenceIsolate 虚假声称登记**(B-88) |
|
|
|
+| 历史教训应用 | B-28(分支切换带走工作区)→ 跑前/跑后双查 branch+HEAD(本轮**捕获运行中分支被外部切换**:cfclub@2b58da609 → feature/signature-canvas2d@c0db9643c → 回 cfclub@ef401f717);B-86(生成物污染口径)→ 锚点统计排除 generated;B-67(假红三证)→ 契约红例定向复跑复核 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 二、项目画像
|
|
|
+
|
|
|
+| 维度 | 内容 |
|
|
|
+|---|---|
|
|
|
+| 业务定位 | 家庭教育成长平台「浠艾福(XAF / CFC)」:家长端/规划师端/孩子端小程序 + 管理后台 + 商城 + AI 服务 |
|
|
|
+| 技术栈 | `cfc-backend` Spring Boot 2.7.18 + MyBatis-Plus + Java 8;`cfc-frontend` uni-app(Vue2);`cfc-web` Vue2+Element UI;`cfc-langgraph` FastAPI+LangGraph+ChromaDB;`dan/danshop` 独立商城 |
|
|
|
+| 模块规模 | 后端 2110 生产源 / 249 控制器 / 333 测试类;前端 26 测试套件;管理端 17 套件;langgraph 43 用例 |
|
|
|
+| 关键路径 | 微信登录 → 家庭/成员 → 五维能量 → 健康报告上传解析 → 测评订单 → 成长任务 → 商城 → AI 管家 |
|
|
|
+| 测试现状 | 后端单测/集成较厚(2802 例);前端用例集中在 diet/signature 改版;E2E 仅 live 28 例;无覆盖率/变异/压测/SAST/无障碍资产 |
|
|
|
+| 质量目标 | 用户口径:**全部用例通过 + 覆盖全部 SRS 与用户场景(含异常流)** |
|
|
|
+| 主要风险 | ①TDD 契约红态堆积(前端 49 + 后端契约 41)导致通过率长期 <96%;②A 类装置红 37 例污染门禁信号;③SRS→可执行锚点仅 11.5%;④langgraph 251 会话卡滞(B-84/B-85 同族) |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 三、执行基线(B-28 纪律:跑前/跑后双查 branch+HEAD)
|
|
|
+
|
|
|
+| 时间点 | 分支 | HEAD | 说明 |
|
|
|
+|---|---|---|---|
|
|
|
+| 跑测起点 | `cfclub` | `2b58da609` | 浏览器/契约/前端 jest 均在此基线完成 |
|
|
|
+| 运行中(外部切换) | `feature/signature-canvas2d` | `c0db9643c` | **研发并行推送签名 v2 实现**,工作区被切走(00:11~00:14 窗口) |
|
|
|
+| 复验签名 v2 | `feature/signature-canvas2d` | `c0db9643c` | 契约 11/11 全绿(详见 §5.6) |
|
|
|
+| 跑测终点 | `cfclub` | `ef401f717` | 研发已合入 `test(S-cfc-116)` 契约测试补全 + docs/chore |
|
|
|
+
|
|
|
+> ⚠️ **B-28 事件**:本轮捕获到「测试执行期间工作区分支被外部切换」(cfclub → feature/signature-canvas2d → cfclub)。已按 B-28 纪律登记;**所有关键结论均落在 `cfclub@2b58da609` 跑测基线**,切换窗口内完成的只有 cfc-web jest(116/116,不受签名分支影响),其余结果不受污染。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 四、执行结果明细
|
|
|
+
|
|
|
+### 4.1 后端契约测试(JDK1.8.0_25 + IDEA Maven 3.9.9,`mvn -o -B test -Dtest=Guhe*ContractTest` 定向复跑,surefire XML 聚合)
|
|
|
+
|
|
|
+```
|
|
|
+契约 15 类 / 122 例 / 81 过 / 41 红(0 错 / 0 skip)
|
|
|
+testCompile: 342 测试源文件 BUILD SUCCESS(消除 R8~R11「无 Maven」误判)
|
|
|
+```
|
|
|
+
|
|
|
+**转绿 7 类(全绿)**:`GuheNoPathMapContractTest` 10/10、`GuheKbVersionSenseContractTest` 11/11、`GuheGateStrainBlockContractTest` 6/6、`GuheShellGuardContractTest` 7/7、`GuhePageTailCleanContractTest` 6/6、`GuheGateLowSideRedlineContractTest` 12/12、`GuheKbFieldExposeContractTest` 6/6。
|
|
|
+
|
|
|
+**仍红 8 类(41 例)**:
|
|
|
+
|
|
|
+| 契约类 | 红/总 | 归因 |
|
|
|
+|---|---|---|
|
|
|
+| `GuheEvidenceIsolateContractTest` | 11/12 | **B-88**:研发声称 14f238ac6「12/12 绿」但**不在 HEAD 链**、源码 grep `tagEvidence/canEnterRecommendationBasis` = 0 命中 → **虚假声称**(类似 P27/P67) |
|
|
|
+| `GuheLowSideRuleLoadContractTest` | 7/10 | 预期 RED(T3/L4-1/L4-2 待实现收尾) |
|
|
|
+| `GuheV2RouteContractTest` | 5/8 | 预期 RED |
|
|
|
+| `GuheReportPersonalAssertContractTest` | 4/9 | 预期 RED(S-cfc-93 个人层双断言,B-83 同族) |
|
|
|
+| `GuheKbQueryLowSidePatchContractTest` | 4/8 | 预期 RED(S-cfc-94 低侧判读补丁块查询) |
|
|
|
+| `GuheLowSideAggregateContractTest` | 4/6 | 预期 RED |
|
|
|
+| `GuheVersionSplitContractTest` | 3/5 | 预期 RED |
|
|
|
+| `GuheLowSideNoSupplementContractTest` | 3/6 | 预期 RED |
|
|
|
+
|
|
|
+### 4.2 浏览器自动化(本机单节点串行,`workers=1`,基线 cfclub@2b58da609)
|
|
|
+
|
|
|
+| 套件 | 结果 | 备注 |
|
|
|
+|---|---|---|
|
|
|
+| live(admin 5 + frontend 6 + shop 4) | **15/15,0 skip** | 与 R97 持平 |
|
|
|
+| health-contract | **13/13** | 持平 |
|
|
|
+| dx-health-bridge | **2 skipped** | 端点 404(允许范围,B-79 已处置) |
|
|
|
+
|
|
|
+**★ B-61 闭环**:`/api/health/plan/generate`、`/api/health/plan/adjust`、`/api/health/plan/attribution` 匿名访问**均 401**(此前连续多轮 200,属 P0 鉴权回归)→ 已转绿,P0 解除。
|
|
|
+
|
|
|
+### 4.3 前端 jest(双套件 + 根级)
|
|
|
+
|
|
|
+| 套件 | 结果 | 红例构成 |
|
|
|
+|---|---|---|
|
|
|
+| `cfc-frontend` | 26 套件 / 423 例 / **49 红** / 3 skip | 预期 RED(uiRework 25 + canvas2d 9 + healthAdjustUi 8 + participantSelect 8)——与 R97 **零漂移** |
|
|
|
+| `cfc-web` | 17 套件 / **116 全绿** | — |
|
|
|
+| `tests/` 根级 | 3 套件 / 23 例 / **16 红** / 7 过 | B-36 黑盒环境依赖(与 R97 **零漂移**) |
|
|
|
+
|
|
|
+### 4.4 langgraph 251 派发(权威口径)
|
|
|
+
|
|
|
+```
|
|
|
+251 仓库: /sc-data/cfc/cfc-langgraph(会话 ses_e426b4328ffeMQ7vpfcN3UsCu4,TC-4a3af2-251-langgraph-pytest-r98)
|
|
|
+命令: timeout 700 .venv/bin/python -m pytest tests --ignore=tests/qna --ignore=tests/test_chat.py -q
|
|
|
+结果: 43 collected / 32 passed / 11 failed / 0 skipped
|
|
|
+```
|
|
|
+
|
|
|
+**11 红全部环境/装置性,无产品逻辑缺陷**:
|
|
|
+
|
|
|
+| 红例分组 | 例数 | 归因 |
|
|
|
+|---|---|---|
|
|
|
+| `test_analyze.py` | 2 | **B-65**:`Checkpointer requires ... thread_id`(源码级,连续第 7 轮) |
|
|
|
+| `test_auto_tag.py` | 5 | **B-74** 装置:`chat 端点返回 500(LLM API Key 401 认证失败)`(R97 为 4 例,本轮 5 例——含 `valid_format` 复现) |
|
|
|
+| `test_intent.py` | 4 | **B-82** 环境:意图分类降级默认 CHAT(LLM key 401,251 凭据对分类不稳定) |
|
|
|
+
|
|
|
+> 251 侧会话行为异常:首派脚本轮询 780s 卡在「远程有更新,同步到最新」未取到 JSON;**但会话实际已产出完整结果**(直接拉取 `/message` 获得 43/32/11)。已备 `dispatch_251_langgraph_r98b.py`(git 同步加硬超时 + 会话兜底核查)。
|
|
|
+
|
|
|
+### 4.5 签名 v2 实现验证(本轮新增复验,基线 feature/signature-canvas2d@c0db9643c)
|
|
|
+
|
|
|
+研发推送 `feature/signature-canvas2d` 分支实现 `c0db9643c`(`feat(DOC-2026-11-09-signature-canvas2d-rewrite)`:手签名改为竖屏直签 + canvas 2d)。测试侧提取 cfclub 修正版契约(`7d7c0b23a`:01c 仅匹配调用形式 + 03b 双断言)在实现分支下定向复跑:
|
|
|
+
|
|
|
+```
|
|
|
+Test Suites: 1 passed, 1 total
|
|
|
+Tests: 11 passed, 11 total (TC-SIG2D-01~08 全绿)
|
|
|
+```
|
|
|
+
|
|
|
+→ **B-81 签名 v2 契约验证通过**:实现满足全部 11 项契约断言。但 cfclub HEAD `ef401f717` **尚未合入该实现**(仅合入 `test(S-cfc-116)` 契约测试补全)→ cfclub 上 canvas2d 9 例仍为**预期 RED**,待实现合入即转绿。
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 五、SRS → 用例更新闭环
|
|
|
+
|
|
|
+窗口内 SRS 变更 5 份全部核对(见 R97 基线 §四),对应测试资产均已入库,本轮**无需新增用例**:
|
|
|
+
|
|
|
+| SRS | 能力键 / 任务 | 对应用例 | 状态 |
|
|
|
+|---|---|---|---|
|
|
|
+| `2026-11-09-diet-recommendation-health-questionnaire-adjust.md` | S-cfc-97 | `recommendation.healthAdjustUi.test.js` 8 RED | 待实现(RED) |
|
|
|
+| `2026-11-09-signature-canvas2d-rewrite.md` | S-cfc-116 / B-81 | `signature.canvas2d.test.js` 11 例 | **实现已验证 11/11 绿(feature 分支),待合入 cfclub** |
|
|
|
+| `2026-11-08-dx-health-bridge.md` | — | `dx-health-bridge-auth.spec.js` 2 skip | 端点 404(允许) |
|
|
|
+| `2026-11-08-diet-recommendation-polish.md` | S-cfc-79 / S-cfc-80 | `recommendation.uiRework` 25 + `participantSelect` 8 RED | 待实现(RED) |
|
|
|
+| `2026-11-08-signature-landscape-fix.md` | B-75 | 已被 v2 整份取代 | 已作废 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 六、门禁结论
|
|
|
+
|
|
|
+**不通过**(用户双目标未达成),但本轮为**结构性改善轮**:B-61 闭环、契约 7 类转绿、签名 v2 实现验证通过。
|
|
|
+
|
|
|
+| 门禁 | 阈值 | 实测 | 结论 |
|
|
|
+|---|---|---|---|
|
|
|
+| G1 全量用例通过率 | ≥96% | 后端契约 81/122 + 前端 371/423 + 管理端 116/116 + langgraph 32/43 + 浏览器 28/28 | ❌ |
|
|
|
+| G2 红例数 | 0 | 后端契约 41 + 前端 49 + 根级 16 + langgraph 11 | ❌ |
|
|
|
+| G3 管理端全绿 | 100% | 116/116 | ✅ |
|
|
|
+| G4 后端可构建 | 0 编译错 | testCompile 342 源 0 错 | ✅ |
|
|
|
+| G5 结果完整性 | 无静默丢失 | 契约 15/15 XML 完整 | ✅ |
|
|
|
+| G6 浏览器套件 | 28/28 | **28/28(零 skip)** | ✅ |
|
|
|
+| G7 langgraph 零失败 | 0 红 | 11 红(全环境/装置性) | ❌ |
|
|
|
+| G8 鉴权契约 | 13/13 | 13/13 + **B-61 转绿** | ✅ |
|
|
|
+
|
|
|
+## 七、未实测项(如实登记)
|
|
|
+
|
|
|
+1. 后端**全量** JUnit(2802 例)本轮未重跑——契约 15 类定向复跑(R97 全量基线仍有效,本轮变更仅 5 个 docs/version/test 提交,无后端生产源码改动)。
|
|
|
+2. 覆盖率、变异测试、性能压测、SAST、SCA —— 无工具/离线档不允许联网。
|
|
|
+3. `tests/test_chat.py` 1 例 —— 真实 LLM 无超时(B-84,两节点均不收敛)。
|
|
|
+4. UAT、BDD、探索性、无障碍、多浏览器 —— 无资产。
|
|
|
+5. 192.168.16.189 浏览器派发 —— 节点 22/4090 全拒(B-56 延续)。
|
|
|
+6. 后端 A 类 37 例的转绿 —— 测试侧下轮处置(B-87)。
|