execution-evidence-2026-11-10.md 8.1 KB

三类流执行证据 · 2026-11-10(execute 档,用户授权)

关联主表:tests/TRACEABILITY-MATRIX.md · 执行档:execute(用户授权「2 授权补三类流」) 目标:为本次补写的 5 个 SC 补三类流(正常 / 异常 / 权限)实际执行证据,并跑一组既有接口层规格做回归基线。 所有结果来自真跑,未伪造任何通过记录或远端 sha。


1. 环境探活(实测)

项 结果
http://cfc.iwintrue.com/admin HTTP 302 → /admin/(可达)
http://cfc.iwintrue.com/frontend HTTP 302(可达)
Playwright / @playwright/test 1.63.0,本地已装,无需公网下载
凭据 由 tests/e2e/helpers/api.js 的 /api/auth/direct-register 自注册测试账号取得,无硬编码口令、全程不打印 token / 手机号
远程前端 SPA 未托管(既有配置 playwright.config.api.js 说明:任意路径返回 Spring Boot 白标 404)→ 纯 UI 断言不可执行
数据写入 未写任何业务数据;仅只读查询类 POST + 自注册测试账号

接口契约探活(本次场景相关)

接口 实测 判定
POST /api/tasks/history code=200,返回 MyBatis-Plus Page(records/total/size/current/pages) ✅ 可用
POST /api/health/checkin/list code=200,返回数组 ✅ 可用
POST /api/health/sleep/list code=200,返回数组 ✅ 可用
POST /api/growth/record/list code=500「服务器内部错误」(带/不带 memberId 均如此) ❌ 契约未落地
POST /api/health/sleep/tags HTTP 404 ❌ 不存在
POST /api/admin/sleep/tags HTTP 404 ❌ 不存在
POST /api/config/public/value(key=sleep.quality.tags) code=500;传 configKey 则提示 key is required ❌ 需核实
POST /api/admin/config/list code=200,返回 58 条配置 ⚠️ parent token 亦可访问,权限边界需核实

2. 实际执行命令与结果

# 命令(cd d:/cfc/tests) 结果 耗时
E1 npx playwright test e2e/api/api-smoke.spec.js -c playwright.config.api.js --project=desktop 4 passed(链路自检) 12.5s
E2 npx playwright test e2e/api/traceability-p94-p95-c26.spec.js -c playwright.config.api.js --project=desktop 6 passed / 4 skipped 12.3s
E3 npx playwright test e2e/api/api-smoke.spec.js e2e/api/nonfunc-security.spec.js e2e/api/nonfunc-perf-compat.spec.js e2e/api/butler-fallback.spec.js e2e/api/human-butler-workorder.spec.js -c playwright.config.api.js --project=desktop 24 passed / 3 failed / 5 skipped 40.2s

去重后本轮合计:42 个用例 → 30 passed / 3 failed / 9 skipped(E1 的 4 条已包含在 E3 中,不重复计数)。

新增可执行规格

tests/e2e/api/traceability-p94-p95-c26.spec.js(本次新建,10 个 test):6 个三类流断言 + 4 个 test.fixme 契约缺口登记。


3. 本次 5 个 SC 的三类流证据状态

SC 正常流 异常流 权限流 证据 说明
SC-P-94 历史完成任务 ✅ TC-P-94 ✅ TC-P-94-E ✅ TC-P-94-P E2 (3 passed) 分页结构、非法参数不 5xx、他人 memberId 不返回数据
SC-P-95 成长历史记录 ✅ TC-P-95 ✅ TC-P-95-E ✅ TC-P-95-P E2 (3 passed) 打卡记录流、非法筛选/日期倒挂、他人 memberId 空返回
SC-C-26 睡眠打卡配置驱动 ❌ 未实测 ❌ 未实测 ❌ 未实测 fixme ×1 配置读取接口 404 / 500,契约未落地;UI 无 SPA
SC-A-27 后台维护睡眠选项 ❌ 未实测 ❌ 未实测 ❌ 未实测 fixme ×1 /api/admin/sleep/tags 404,需确认是否由 /api/admin/config/* 承载
SC-P-96 我的成就五列 ❌ 未实测 ❌ 未实测 ❌ 未实测 fixme ×1 纯前端布局断言,远程无 SPA,需本地/真机执行

结论:5 个 SC 中 2 个(SC-P-94 / SC-P-95)拿到完整三类流实际通过证据;3 个因契约缺口或无前端 SPA 未实测,已如实登记,未计为通过。


4. 实测发现的契约/缺陷线索(五要素)

# ①问题描述 ②测试 bug 点 ③最优修改方案 ④修改目的 ⑤闭环方式与通过标准
1 成长档案记录接口不可用 /api/growth/record/list 带/不带 memberId 均 code=500;见 traceability-p94-p95-c26.spec.js:114 定位后端异常栈并修复,或明确该接口已废弃、改由 checkin 聚合 SC-P-95「打卡+档案合并口径」可用 接口返回 200 且结构可判定,TC-P-95 聚合断言通过
2 睡眠选项配置读取契约未落地 /api/health/sleep/tags 404;/api/config/public/value?key=sleep.quality.tags 500 确认实现落在哪个路径(疑为 /api/admin/config/*),补齐公开读取接口或修正 key 处理 SC-C-26 配置驱动可验证 能读到 9 项含「正常」的配置;缺失时回退默认不报错
3 后台维护睡眠选项接口不存在 /api/admin/sleep/tags 404;见 spec:118 按需求变更 C 实现 get/save + admin 权限校验,或确认复用通用配置接口 SC-A-27 可验证 增/删/改/序保存生效、非 admin 403、空列表/非法值 400
4 并发隔离失败(回归) nonfunc-perf-compat.spec.js:92 [TC-P-N02/X-N01] 并发不串数据 3 failed 之一 排查并行 AI 请求 conversationId 串用 并发下数据不串 该用例通过
5 后台登录未授权码不符(回归) nonfunc-security.spec.js:77 [TC-A-N05]:期望 401/403,实际 code=400 手机号和验证码不能为空 统一登录接口未授权态返回 401,或修正用例期望并与安全契约对齐 权限断言可判定 期望与实际契约一致且用例通过
6 非 PDF 上传未被 4xx 拒绝(回归) nonfunc-security.spec.js:131 [TC-P-N11]:期望 4xx 核查上传校验链路 恶意文件不落库 返回 400/415/422 之一且用例通过
7 权限判定口径待核实 /api/tasks/history、/api/health/checkin/list 传他人 memberId 返回 200 + 空列表(非 403);/api/admin/config/list parent token 可访问 58 条 造跨家庭数据夹具后复测,明确「过滤后 200」还是「403」为正式契约,并同步文档用例 TC-P-94-P / TC-P-95-P 权限断言与实际一致 跨家庭夹具下不泄露他人数据;契约与用例一致

⚠️ 第 7 项在空库条件下不能判定为越权漏洞(新注册账号无历史数据),仅记录契约差异,标「需核实」,不夸大为安全缺陷。


5. DEV_GOAL「跑通」判据达成情况

docs/tdd/orchestration/DEV_GOAL_user_scenarios.md 定义「跑通」= 三类流实际执行证据 + 推 origin/cfclub + 工作区干净。

判据 状态
三类流本地实际执行证据 ✅ 已产生(SC-P-94 / SC-P-95 共 6 条通过,见 §2 E2)
推 origin/cfclub ❌ 未执行——本轮授权不含 git 提交/推送,未擅自操作
工作区 clean-check ❌ 未执行(本轮新增/修改了测试资产,工作区必然不干净)
更新 sc-key-map.md 跑通状态列 ❌ 未改——缺远端证据,擅自标记会伪造台账

因此本轮不把 SC-P-94/95 计入「已跑通」,sc-key-map.md 仍为 15/241。若需正式入册,请单独授权 git 提交/推送与 mark-green 流程。


6. 边界声明

  • 仅访问内网 192.168.16.251(cfc.iwintrue.com),未访问外部公网;未安装任何依赖(Playwright 1.63.0 + chromium 本已就绪)。
  • 未修改任何生产源码;新增/修改仅限 tests/ 与 docs/需求分析/、docs/tdd/test/ 的测试资产与文档。
  • 未提交、未推送、未执行任何 git 写操作;未输出 token、口令、手机号等敏感信息。
  • 未重置远程数据库、未写业务数据;direct-register 自注册测试账号为既有测试约定(api-smoke.spec.js 同款)。
  • 失败与跳过项均如实记录,未将 fixme / skip 计为通过,未伪造执行证据。