自动化闭环第 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 同族) |
| 时间点 | 分支 | 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,不受签名分支影响),其余结果不受污染。
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 |
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 解除。
| 套件 | 结果 | 红例构成 |
|---|---|---|
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 零漂移) |
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 同步加硬超时 + 会话兜底核查)。
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 变更 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 转绿 | ✅ |
tests/test_chat.py 1 例 —— 真实 LLM 无超时(B-84,两节点均不收敛)。