关联主表:
tests/TRACEABILITY-MATRIX.md· 执行档:execute(用户授权「2 授权补三类流」) 目标:为本次补写的 5 个 SC 补三类流(正常 / 异常 / 权限)实际执行证据,并跑一组既有接口层规格做回归基线。 所有结果来自真跑,未伪造任何通过记录或远端 sha。
| 项 | 结果 |
|---|---|
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 亦可访问,权限边界需核实 |
| # | 命令(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 契约缺口登记。
| 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 未实测,已如实登记,未计为通过。
| # | ①问题描述 | ②测试 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 项在空库条件下不能判定为越权漏洞(新注册账号无历史数据),仅记录契约差异,标「需核实」,不夸大为安全缺陷。
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 流程。
192.168.16.251(cfc.iwintrue.com),未访问外部公网;未安装任何依赖(Playwright 1.63.0 + chromium 本已就绪)。tests/ 与 docs/需求分析/、docs/tdd/test/ 的测试资产与文档。direct-register 自注册测试账号为既有测试约定(api-smoke.spec.js 同款)。