automation-run-2026-11-09-R98.md 10 KB

全栈测试执行记录 · 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)。