生成:2026-11-10(测试负责人闭环,用户授权「补写缺用例 + 重建双向矩阵」) 单一事实源:场景基线
docs/tdd/orchestration/sc-key-map.md(241 个 SC)· 用例tests/test-cases/*.md· 需求docs/需求分析/*.md与docs/superpowers/specs/*.md状态定义:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池(需派生,本轮未擅自编号入册) 本文所有数字为编号级实证扫描结果,不引用任何文档自述口径(历史台账存在 678 / 701 / 729 / 767 四套互相矛盾的数字)。
「场景是否有用例」必须分三层回答,只报第一层会得出错误结论:
| 层 | 判据 | 数据来源 |
|---|---|---|
| L1 编号层 | 每个 SC 是否存在 TC-xxx / -E / -P 三个编号 |
tests/test-cases/*.md 表首列 |
| L2 语义层 | 该 TC 的「所属场景」列与步骤/预期是否真在描述这个 SC | TC 行正文 vs 应用场景总览.md 场景标题 |
| L3 执行层 | 三类流是否有实际通过证据且已推远端、工作区干净 | sc-key-map.md 跑通状态列 + automation-status.md |
| 项 | 补写前 | 补写后 | 判定 |
|---|---|---|---|
| 权威 SC 基线 | 241 | 241 | 不变 |
| 唯一 TC 编号 | 827 | 842(+15) | 正常流 282 / 异常流 249 / 权限流 243 / 非功能 58 / 深挖 10 |
| L1 三流齐全 | 237/241 | 241/241(100%) | ✅ 4 个纯缺口已补;另发现 1 个编号占用冲突已补新编号 |
| L2 编号对齐 | 150 对齐 / 51 错位 / 40 格式差异 | 不变 | ⚠️ 硬缺口,见 §4 |
| L3 已跑通(DEV_GOAL 严格口径) | 15/241(6.2%) | 15/241(未变) | ❌ 226 个仍无远端证据;本轮新增本地执行证据 6 条但未推 origin/cfclub,不计入「已跑通」,详见 §9 |
| 本轮真实执行用例 | — | 42 个:30 passed / 3 failed / 9 skipped | 见 docs/tdd/test/execution-evidence-2026-11-10.md |
| 需求侧 SC 回链 | 11/214(5.1%) | 16/214(7.5%) | 8 份 11 月变更已补回链附录 |
| 需求侧 TC 回链 | 1/214(0.5%) | 6/214(2.8%) | 同上 |
需求侧反向锚点已写入每份需求文档末尾的「附录 · 场景与用例回链」,可双向跳转。
| # | 需求变更文档(docs/需求分析/) |
能力键 | 关联 SC | 关联 TC(正常 / 异常 / 权限) | 状态 |
|---|---|---|---|---|---|
| R1 | 2026-11-06-成就成长打卡需求变更.md |
task.history.view |
SC-P-94 | TC-P-94 / -E / -P | ✅ 本次补写 |
| R1 | 同上 | growth.history.view |
SC-P-95 | TC-P-95 / -E / -P | ✅ 本次补写 |
| R1 | 同上 | sleep.config.tags |
SC-C-26 | TC-C-26 / -E / -P | ✅ 本次补写 |
| R1 | 同上 | sleep.config.tags |
SC-A-27 | TC-A-27-S / -S-E / -S-P | ✅ 本次补写(编号占用冲突,见 G-2) |
| R1 | 同上 | achievement.grid.fiveCol |
SC-P-96 | TC-P-96 / -E / -P | ✅ 本次补写 |
| R2 | 2026-11-06-优惠券已领取券按钮修复需求变更.md |
coupon.claimed.actions / coupon.checkout.autoselect |
SC-P-57 · SC-P-75 · SC-A-17 | TC-P-57* / TC-P-75* / TC-A-17* | ⚠️ 双按钮、按券类型跳转、checkout 自动选券三处变更点均无断言 |
| R3 | 2026-11-06-我的团队收益口径与邀请分享需求变更.md |
team.referral.earnings.cf / team.invite.share |
❌ 无(关键词命中的 SC-P-01/02/09、SC-G-04、SC-X-04 均为「家庭邀请」,语义假阳性) | 无可承载 TC | ❌ 未入场景池 |
| R4 | 2026-11-06-报告上传页关联商品卡片需求变更.md |
report.upload.linked-products / report.upload.member-4col |
SC-T-11(同页面主题) | TC-T-11* 实为「成长计划」,语义错位 | ⚠️ 需先裁决编号重排再派生 |
| R5 | 2026-11-07-商城价格排序需求变更.md |
shop.price.sort |
SC-G-05 · SC-C-22 · SC-X-07 | TC-G-05* / C-22* / X-07* | ⚠️ 排序栏、价格列白名单、body 数组契约均无断言 |
| R6 | 2026-11-07-财富中心贡献榜管理员口径需求变更.md |
family.earnings.admin.role / family.earnings.pool.toggle |
❌ 无(241 SC 标题命中 0) | 无 | ❌ 未入场景池 |
| R7 | 2026-11-08-手签名横屏适配需求变更.md |
signature.landscape.layout |
❌ 无(SC-G-11 为隐私政策,假阳性) | 无 | ❌ 未入场景池;v1.0 已被 R8 取代,不单独派生 |
| R8 | 2026-11-09-手签名实现方式重写需求变更.md |
signature.canvas2d.rewrite |
❌ 无 | 无 | ❌ 未入场景池(当前有效正本) |
汇总:8 份变更中 1 份(R1)完成三流闭环;3 份(R2/R4/R5)有主题相近 SC 但变更点未派生用例;4 份(R3/R6/R7/R8)未入场景池。R7 为已废弃版本,实际待闭环为 7 份。
⚠️ 纠偏:上一轮「6 份需求变更在场景库中无对应主题」是窄关键词误判。实测 7 份中 5 份能找到主题相近 SC,但其中大部分为语义假阳性(家庭邀请 ≠ 推广收益、隐私政策 ≠ 手签名);真实「未入场景池」为 4 份。结论方向不变,依据更准确。
| 场景 | 正常流 | 异常流(具体故障注入) | 权限流(具体越权对象) | 落点 |
|---|---|---|---|---|
| SC-P-94 历史完成任务 | TC-P-94 | TC-P-94-E | TC-P-94-P | tests/test-cases/parent.md「成就与成长历史专项」 |
| SC-P-95 成长历史记录 | TC-P-95 | TC-P-95-E | TC-P-95-P | 同上 |
| SC-P-96 我的成就五列 | TC-P-96 | TC-P-96-E | TC-P-96-P | 同上 |
| SC-C-26 睡眠打卡配置驱动 | TC-C-26 | TC-C-26-E | TC-C-26-P | tests/test-cases/child.md「睡眠打卡配置驱动专项」 |
| SC-A-27 后台维护睡眠选项 | TC-A-27-S | TC-A-27-S-E | TC-A-27-S-P | tests/test-cases/admin.md「睡眠情况选项后台维护专项」 |
编写原则:异常流为具体故障注入 + 可判定断言(非法分页、单源超时、两源重复 ID、非法 JSON、并发重复提交、配置空列表等),不使用「系统给出明确错误提示而非 500」模板文案;权限流针对具体越权对象(F9 家庭成员 memberId、孩子直调后台 save、非 admin 改配置),不复用「统一 403/401」模板。未在需求或接口参考中明确的接口路径一律标「需核实」,未臆造 API。
(a)51 个编号错位(TC 的「所属场景」列指向另一编号,呈整体偏移,系历史用例编号未随场景重排同步):
| 角色 | 数量 | 明细(SC → 所属场景列) |
|---|---|---|
| A 运营 | 21 | SC-A-02→A-1, A-03→A-2, A-04→A-2, A-05→A-2, A-06→A-2, A-07→A-2, A-08→A-3, A-09→A-3, A-10→A-4, A-11→A-4, A-12→A-4, A-13→A-5, A-14→A-6, A-15→A-6, A-16→A-7, A-17→A-16, A-18→A-17, A-19→A-18, A-20→A-19, A-21→A-20, A-22→A-21 |
| P 家长 | 16 | SC-P-03→P-2, P-04→P-2, P-05→P-4, P-06→P-4, P-07→P-5, P-08→P-6, P-09→P-7, P-10→P-8, P-11→P-8, P-12→P-9, P-13→P-10, P-14→P-10, P-15→P-3, P-16→P-10, P-17→P-12, P-18→P-11 |
| C 孩子 | 5 | SC-C-05→C-4, C-06→C-5, C-07→C-6, C-08→C-7, C-09→C-8 |
| T 规划师 | 9 | SC-T-04→T-3, T-05→T-4, T-06→T-4, T-07→T-5, T-08→T-5, T-09→T-6, T-10→T-7, T-11→T-8, T-12→T-8 |
典型实证:TC-A-17* 三流内容为「团队分润/提现审核(S-cfc-68)」而 SC-A-17 是「优惠券/活动配置管理」;TC-T-11* 为「成长计划列表」而 SC-T-11 是「DAN 报告上传与解析」;TC-X-07* 为「全局统计」而 SC-X-07 是「商城履约闭环」。
(b)40 个「所属场景」列非编号(格式差异,语义对齐需人工核实,不判定为错误):SC-B-01/02/04~07/09~12(10 个,9 列格式)、SC-H-01~07(7 个,9 列格式)、SC-X-01~22(22 个,9 列格式)、SC-A-27(1 个,写的是能力键 S-cfc-68)。
(c)主题词粗筛:143/241 个 SC 的标题核心词未出现在对应三流 TC 正文中。该指标为粗筛线索,不作结论(标题词与用例用词常不同,如「管理端登录」vs 用例写「登录」),需逐份人工核实。
sc-key-map.md 跑通状态列精确取值:已跑通 15(10 个「2026-11-07 收口」+ 5 个「2026-11-06 O-3 收口」)、未跑通 226。按 DEV_GOAL_user_scenarios.md 判据,「跑通」需三类流实际执行证据 + 推 origin/cfclub + 工作区干净;automation-status.md 亦显示结构化用例仅 14 条通过、638 条待自动化。
2026-11-10 execute 档补充:本轮真实执行 42 个用例(30 passed / 3 failed / 9 skipped),其中 SC-P-94 / SC-P-95 共 6 条三类流断言全部通过,本地执行证据已产生。但因未推远端、工作区不干净,不更新
sc-key-map.md状态列,L3 仍为 15/241。完整记录见 §9 与docs/tdd/test/execution-evidence-2026-11-10.md。
| 文档集 | 份数 | SC 回链 | TC 回链 |
|---|---|---|---|
docs/需求分析/ |
14 | 6(42.9%) | 5(35.7%) |
docs/superpowers/specs/ |
200 | 10(5.0%) | 1(0.5%) |
| 合计 | 214 | 16(7.5%) | 6(2.8%) |
| 其中 11 月需求变更 | 8 | 6 | 5 |
8 份 11 月变更均已追加「附录 · 场景与用例回链」,状态声明覆盖 8/8;其中 6 份能锚定具体 SC 编号、5 份能锚定具体 TC 编号,其余因「未入场景池」如实标为待派生——不硬塞编号制造 100% 回链假象。200 份 specs 未动,仍是最大反向追溯空洞。
| ID | 缺口 | 证据 | 建议动作 | 通过标准 |
|---|---|---|---|---|
| G-1 | 7 份有效需求变更未闭环 | §2(R2~R8,R7 已废弃) | 3 份在既有 SC 派生变更分支用例;4 份先派生 SC 入册再派生三流 TC(编号需主理人分配) | 每份变更均有 SC 回链 + 三流 TC,且断言覆盖变更点 |
| G-2 | 51 个编号语义错位 + 1 个编号占用(SC-A-27) | §4(a) | 裁决是否重排历史 TC 编号 / 建立别名映射;本轮未改动任何既有 TC,仅用 TC-A-27-S* 绕过冲突 |
241 个 SC 的 TC「所属场景」列与 SC 编号一致率 100% |
| G-3 | 200 份 specs 几乎无反向追溯 | §5 | 设计文档模板加「关联 SC / TC」必填字段 | specs SC 回链率 ≥95% |
| G-4 | 226 个 SC 无三类流执行证据 | §4 L3 | execute 档逐场景补实际通过证据并推远端、接入 CI | 241/241 三类流实测通过 + git merge-base --is-ancestor 核验 + 工作区 clean |
| G-5 | 权限流模板化(约 21%) | 上轮实测:238 条权限流仅 208 种唯一正文 | 按场景改写为具体越权对象/接口/数据断言(本次新增 5 条已按此规范编写) | 权限流唯一正文 ≥95% |
| G-6 | 四套台账数字矛盾 | SRS.md / README.md / inventory.md / 总览 |
以本矩阵编号级扫描为单一事实源重生成台账 | 各台账数值一致且与扫描误差为 0 |
| G-7 | 睡眠配置与成长档案契约未落地 | 证据台账 §1 / §4:/api/health/sleep/tags 404、/api/admin/sleep/tags 404、/api/config/public/value 500、/api/growth/record/list 500 |
确认实现真实路径(疑为 /api/admin/config/*)并补齐读取/维护接口;造跨家庭数据夹具后复核权限口径 |
4 个 fixme 全部转正常用例并通过;权限契约与 TC-P-94-P / TC-P-95-P 文档断言一致 |
| G-8 | 回归基线 3 个失败 | nonfunc-perf-compat.spec.js:92(并发串数据)、nonfunc-security.spec.js:77 / :131 |
按证据台账 §4 第 4~6 项修实现或对齐契约 | 3 条用例通过 |
| G-9 | 本地执行证据未入册 | 证据台账 §5:未推 origin/cfclub、未 clean-check |
单独授权后执行 git 提交/推送与 mark-green 流程 | git merge-base --is-ancestor 核验 + clean-check 0 + SC-P-94/95 状态列更新 |
在 d:/cfc 下执行以下只读脚本,重算 L1 / L2 / 需求回链:
import re, glob, collections
rd = lambda p: open(p, encoding='utf-8', errors='replace').read()
km = set(re.findall(r'\|\s*(SC-[A-Z]+-\d+)\s*\|', rd('docs/tdd/orchestration/sc-key-map.md')))
tc = set()
for f in glob.glob('tests/test-cases/*.md'):
tc |= set(re.findall(r'^\|\s*(TC-[^\s|]+)\s*\|', rd(f), re.M))
full = sum(1 for s in km if all(k in tc for k in
(s.replace('SC-','TC-'), s.replace('SC-','TC-')+'-E', s.replace('SC-','TC-')+'-P')))
print(f'L1 三流齐全 {full}/{len(km)} | 唯一 TC {len(tc)}')
req = glob.glob('docs/需求分析/*.md') + glob.glob('docs/superpowers/specs/*.md')
print('SC回链', sum(1 for f in req if re.search(r'\bSC-[A-Z]+-\d+', rd(f))), '/', len(req))
print('TC回链', sum(1 for f in req if re.search(r'\bTC-[A-Z]+-', rd(f))), '/', len(req))
L2 语义层需比对 TC「所属场景」列(归一 SC-?([A-Z]+)-0*(\d+))与 SC 编号;L3 执行层需读 sc-key-map.md 跑通状态列按列索引精确取值——⚠️ 不可用子串 跑通 匹配(会命中「未跑通」,历史教训 LES-002)。
tests/、docs/需求分析/ 附录、docs/tdd/test/ 证据台账),未修改任何生产源码、未提交、未推送、未执行任何 git 写操作。192.168.16.251,未访问外部公网;未安装依赖(Playwright 1.63.0 与 chromium 本已就绪);凭据由既有 direct-register 自注册取得,未硬编码、未打印 token/口令/手机号;未重置远程数据库、未写业务数据。fixme / skip 不计为通过。完整记录:
docs/tdd/test/execution-evidence-2026-11-10.md· 新增规格:tests/e2e/api/traceability-p94-p95-c26.spec.js
命令(cd d:/cfc/tests) |
结果 |
|---|---|
npx playwright test e2e/api/api-smoke.spec.js -c playwright.config.api.js --project=desktop |
4 passed(链路自检) |
npx playwright test e2e/api/traceability-p94-p95-c26.spec.js -c playwright.config.api.js --project=desktop |
6 passed / 4 skipped |
npx playwright test e2e/api/{api-smoke,nonfunc-security,nonfunc-perf-compat,butler-fallback,human-butler-workorder}.spec.js -c playwright.config.api.js --project=desktop |
24 passed / 3 failed / 5 skipped |
去重合计 42 个用例:30 passed / 3 failed / 9 skipped。SC-P-94 / SC-P-95 三类流 6 条全部真实通过;SC-C-26 / SC-A-27 / SC-P-96 因配置接口 404/500 与远程无前端 SPA 未实测,登记为 4 个 fixme。因缺「推 origin/cfclub + 工作区干净」两项判据,本轮不更新 sc-key-map.md 跑通状态列(仍 15/241),需单独授权 git 流程后入册(G-9)。