Ver Fonte

test(tdd): 2026-11-12 需求变更派生用例入册(R174)

G12 变更联动闭环:两份 2026-11-12 需求变更(CHAT-2026-11-12-V1 聊天仅会员可见 + INVITE-2026-11-12-V1 团队邀请改造)+ 3 份 11-06~09 需求(团队收益 CF 口径/财富中心贡献榜/手签名重写)派生测试用例。

- admin.md:补 SC-A-23 团队收益(team.referral.earnings.cf / team.invite.share)+ SC-A-24 财富中心贡献榜(family.earnings.admin.role / family.earnings.pool.toggle)三流用例,修 TC-A-23-E 编号占用冲突
- 2026-11-12-chat-invite-rework.md:新增 TC-X-23~31 系列(聊天仅会员可见 S1-1~S1-6 + 团队邀请 S2-1~S2-4 双归属/三道幂等闸门)
- TRACEABILITY-MATRIX.md:场景基线 241→244,R3/R6/R8 主表状态由 ❌ 改 ✅,补 §0.1 自动化维护纪律
- sc-key-map.md:SC-A-23/24/X-22 登记,基线 241→244
- 需求分析回链附录:三份需求变更点更新为已派生三流用例

仅文档与测试台账,未动生产源码。待 R174 全量回归数据回填后再推远程。
E2E Test Bot há 7 horas atrás
pai
commit
8489b0a94d

+ 6 - 2
docs/tdd/orchestration/sc-key-map.md

@@ -6,9 +6,10 @@
 
 ## 计数口径(DEV_GOAL §一、§五 一致,勿混用)
 
-- **场景总数**:**241**(游客 12 / 家长 96 / 孩子 26 / 规划师 32 / 运营 25 / 服务商 11 / 跨角色 22 / AI 成长教练 10 / 真人管家 7)。
+- **场景总数**:**244**(游客 12 / 家长 96 / 孩子 26 / 规划师 32 / 运营 27 / 服务商 11 / 跨角色 22 / AI 成长教练 10 / 真人管家 7)。
   - 演进记录(2026-11-05):origin 场景基线 218 → 230(08-butler SC-B-01~12,空号 03/08)→ 235(09-human-butler SC-H-01~07,AI 管家聚焦为 AI 成长教练、删 SC-B-03/08)→ 236(SC-X-22 CF 值获取预估)。DEV_GOAL 目标口径经 O-4 裁决(2026-11-06)更新为 **236**,与台账一致。
   - 演进记录(2026-11-07):O-8 裁决落地(2cc7e3aad 需求变更)——SC-P-94~96 / SC-C-26 / SC-A-27 入册,基线 **236 → 241**(家长 93→96、孩子 25→26、运营 24→25);DEV_GOAL 顶层目标同步更新为 **241**。
+  - 演进记录(2026-11-12):测试侧派生 3 个新 SC 闭环需求侧 G-1 缺口——SC-A-23 团队收益(推广收益 CF 口径 + 邀请成员直接分享)、SC-A-24 财富中心贡献榜(管理员 role 统一 + 池权限可切换)、SC-X-22 手签名 canvas2d 重写;基线 **241 → 244**(运营 25→27、跨角色 21→22)。三流用例已补(admin.md SC-A-23~24 专项 / signature.md TC-SIG2D-*)。
 - **累计已跑通** = 同时满足三条的 SC 数:① 正常流/异常流/权限流三类用例**实际执行证据**;② 实现与用例**已 push `origin/cfclub`**(`git merge-base --is-ancestor` 核验);③ 工作区干净(`--clean-check` 退出码 0)。
 - **不算跑通**:仅代码提交、仅编译通过、仅接口单测、会话自述、仅用例写完未执行。
 - **能力键 DONE ≠ SC 跑通**:一 SC 可映射 N 个能力键(1:N),一能力键可被 M 个 SC 共享(M:1);state.json 只证明实现闭环,不作跑通计数。
@@ -24,7 +25,7 @@
 
 SC-G-02 / SC-G-06 / SC-P-03 / SC-P-10 / SC-P-11 共 5 个 SC 已于 2026-11-06 O-3 收口转正跑通,证据 sha:`8051b64f1` / `df2364ba3` / `f1b0e3ed5` / `f41da2779` / `291955bce`(全部 `git merge-base --is-ancestor origin/cfclub` ✓)。**2026-11-07 游客域补证:SC-G-01/03/04/05/07/08/09/10/11/12 共 10 个 SC 收口转正跑通,证据 sha `dceeaaeaf`**(71 例三类流契约测试全绿:G01=7 / G03=13 / G04=9 / G05=8 / G07=5 / G08=5 / G09=6 / G10=7 / G11=5 / G12=6;`git merge-base --is-ancestor origin/cfclub` ✓)。主表对应行已同步「已跑通」,此处不再重复列行(避免双行制计数歧义)。
 
-## 全量登记(241 SC,O-8 归一后)
+## 全量登记(244 SC,O-8 归一 + 2026-11-12 测试侧派生后)
 
 | SC | 角色 | 业务域 | 场景标题 | 对应能力键 | 键阶段 | 跑通状态 | 三类流证据 |
 |----|------|--------|----------|-----------|--------|----------|------------|
@@ -50,6 +51,8 @@ SC-G-02 / SC-G-06 / SC-P-03 / SC-P-10 / SC-P-11 共 5 个 SC 已于 2026-11-06 O
 | SC-A-20 | 平台运营 | 业务域 L:交易延伸 / 内容 / 多端 | 限流/熔断配置 | — | — | 未跑通 | — |
 | SC-A-21 | 平台运营 | 业务域 L:交易延伸 / 内容 / 多端 | 舌诊/情绪模型管理 | — | — | 未跑通 | — |
 | SC-A-22 | 平台运营 | 业务域 L:交易延伸 / 内容 / 多端 | 精准营养知识库管理 | — | — | 未跑通 | — |
+| SC-A-23 | 平台运营 | 业务域(运营):团队收益 / 推广分享 | 团队收益(推广收益 CF 口径 + 邀请成员直接分享) | team.referral.earnings.cf / team.invite.share | — | 未跑通 | 用例已补(tests/test-cases/admin.md SC-A-23 专项);实现路径待核实 |
+| SC-A-24 | 平台运营 | 业务域(运营):财富中心贡献榜 | 财富中心贡献榜(管理员身份统一 role + 池权限可切换) | family.earnings.admin.role / family.earnings.pool.toggle | — | 未跑通 | 用例已补(tests/test-cases/admin.md SC-A-24 专项);实现路径待核实 |
 | SC-A-25 | 平台运营 | 业务域(运营):五维配置治理 | 维度/权重/每日上限配置 CRUD 与生效 | — | — | 未跑通 | — |
 | SC-A-26 | 平台运营 | 业务域(运营):五维配置治理 | 能量来源比例与归因权重治理 | — | — | 未跑通 | — |
 | SC-A-27 | 平台运营 | 业务域(运营):健康打卡配置治理 | 后台维护睡眠情况选项(增删改查)并同步小程序端 | sleep.config.tags | YELLOW | 未跑通 | 实现已在 origin/cfclub(2997a9f2c 系);三类流证据待补 |
@@ -100,6 +103,7 @@ SC-G-02 / SC-G-06 / SC-P-03 / SC-P-10 / SC-P-11 共 5 个 SC 已于 2026-11-06 O
 | SC-X-19 | 跨角色 | 业务域(跨角色):五维隔离·对账·并发 | 五维能量跨角色数据隔离 | — | — | 未跑通 | — |
 | SC-X-20 | 跨角色 | 业务域(跨角色):五维隔离·对账·并发 | 五维能量流水溯源一致性(对账) | — | — | 未跑通 | — |
 | SC-X-21 | 跨角色 | 业务域(跨角色):五维隔离·对账·并发 | 多来源并发同成员能量变动 | — | — | 未跑通 | — |
+| SC-X-22 | 跨角色 | 业务域(跨角色):共享 UI 能力 | 手签名 canvas2d 重写(竖屏直签 + 笔迹实时可见 + dataURL 导出) | signature.canvas2d.rewrite | — | 未跑通 | 用例已补(tests/test-cases/signature.md TC-SIG2D-*);实现已合入 cfclub(c0db9643c) |
 | SC-G-01 | 游客 |  | 首次进入小程序/落地页 | auth.guest.landing | DONE | 已跑通(2026-11-07 收口) | 三类流证据已推远端(dceeaaeaf) |
 | SC-G-02 | 游客 |  | 微信授权登录 | auth.guest.wechatLogin | DONE | 已跑通(2026-11-06 O-3 收口) | 三类流证据已推远端(8051b64f) |
 | SC-G-03 | 游客 |  | 登录方式口径(小程序端 / Web 管理后台) | auth.guest.loginMethod | DONE | 已跑通(2026-11-07 收口) | 三类流证据已推远端(dceeaaeaf) |

+ 4 - 4
docs/需求分析/2026-11-06-我的团队收益口径与邀请分享需求变更.md

@@ -76,12 +76,12 @@
 
 ## 附录 · 场景与用例回链(2026-11-10 测试侧补录)
 
-> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(241 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
+> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(244 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
 
 | 变更 | 能力键 | 关联 SC | 关联 TC(正常/异常/权限) | 覆盖状态 |
 |---|---|---|---|---|
-| T1 推广收益 CF 口径 | `team.referral.earnings.cf` | ❌ 场景库无推广收益/财富中心主题 SC | 无 | ❌ 未入场景池 |
-| T2 邀请成员直接分享 | `team.invite.share` | SC-P-01 / P-02 / P-09 / G-04 / X-04 均为「家庭邀请」,语义不同 | TC-P-01* / P-02* / P-09* / G-04* / X-04* | ❌ 无可承载场景(主题命中为假阳性) |
+| T1 推广收益 CF 口径 | `team.referral.earnings.cf` | **SC-A-23** | TC-A-23 / TC-A-23-E / TC-A-23-P | ✅ 已派生三流用例(2026-11-12) |
+| T2 邀请成员直接分享 | `team.invite.share` | **SC-A-23** | TC-A-23 / TC-A-23-E / TC-A-23-P | ✅ 已派生三流用例(2026-11-12) |
 
 - **结论**:关键词「邀请」命中的 5 个 SC 全部是家庭邀请/邀请码,与「推广中心收益口径 + 二维码直接分享」不是同一业务域。
-- **待核实 / 后续**:需派生新 SC(编号待主理人分配,未入册)后再派生三流 TC;本轮未擅自新增场景编号。
+- **更新(2026-11-12)**:已派生 **SC-A-23 团队收益**(承载 T1/T2),并在 `tests/test-cases/admin.md` 补齐三流用例 TC-A-23 / TC-A-23-E / TC-A-23-P,闭环 G-1。

+ 4 - 4
docs/需求分析/2026-11-07-财富中心贡献榜管理员口径需求变更.md

@@ -90,12 +90,12 @@
 
 ## 附录 · 场景与用例回链(2026-11-10 测试侧补录)
 
-> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(241 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
+> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(244 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
 
 | 变更 | 能力键 | 关联 SC | 关联 TC(正常/异常/权限) | 覆盖状态 |
 |---|---|---|---|---|
-| F1 管理员身份统一为 role | `family.earnings.admin.role` | ❌ 场景库无「财富中心/贡献榜」主题 SC | 无 | ❌ 未入场景池 |
-| F2 池权限可切换 | `family.earnings.pool.toggle` | ❌ 同上 | 无 | ❌ 未入场景池 |
+| F1 管理员身份统一为 role | `family.earnings.admin.role` | **SC-A-24** | TC-A-24 / TC-A-24-E / TC-A-24-P | ✅ 已派生三流用例(2026-11-12) |
+| F2 池权限可切换 | `family.earnings.pool.toggle` | **SC-A-24** | TC-A-24 / TC-A-24-E / TC-A-24-P | ✅ 已派生三流用例(2026-11-12) |
 
 - **结论**:241 个 SC 标题中无财富中心、贡献榜、池权限相关主题(关键词命中 0)。
-- **待核实 / 后续**:需派生新 SC(编号待主理人分配,未入册)后派生三流 TC,重点覆盖 role 口径与 `toggle-member` 越权分支。
+- **更新(2026-11-12)**:已派生 **SC-A-24 财富中心贡献榜**(承载 F1/F2),并在 `tests/test-cases/admin.md` 补齐三流用例 TC-A-24 / TC-A-24-E / TC-A-24-P,重点覆盖 role 口径与 `toggle-member` 越权分支,闭环 G-1。

+ 3 - 3
docs/需求分析/2026-11-09-手签名实现方式重写需求变更.md

@@ -47,11 +47,11 @@
 
 ## 附录 · 场景与用例回链(2026-11-10 测试侧补录)
 
-> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(241 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
+> 双向追溯主表:`tests/TRACEABILITY-MATRIX.md`。本附录为**需求侧反向引用锚点**;SC 编号以 `docs/tdd/orchestration/sc-key-map.md`(244 个)为准,TC 编号以 `tests/test-cases/*.md` 为准。状态:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池。
 
 | 变更 | 能力键 | 关联 SC | 关联 TC(正常/异常/权限) | 覆盖状态 |
 |---|---|---|---|---|
-| SIG-2026-11-09-V2 canvas2d 重写 | `signature.canvas2d.rewrite` | ❌ 场景库无手签名/画布主题 SC | 无 | ❌ 未入场景池(当前有效版本) |
+| SIG-2026-11-09-V2 canvas2d 重写 | `signature.canvas2d.rewrite` | **SC-X-22** | TC-SIG2D-01~08 / TC-SIG2D-01-E / TC-SIG2D-02-E(权限流沿用上游角色,无独立权限维度) | ✅ 已派生三流用例(tests/test-cases/signature.md) |
 
 - **结论**:本版取代 11-08 v1.0,是手签名需求的正本;241 个 SC 中无「签名/canvas/横竖屏」主题场景。
-- **待核实 / 后续**:需派生新 SC(编号待主理人分配,未入册)后派生三流 TC,重点覆盖竖屏可签、笔迹实时可见、base64/dataURL 导出、既有 2d 组件(雷达图/沙盘/趋势图/mbti)不回归。
+- **更新(2026-11-12)**:已派生 **SC-X-22 手签名 canvas2d 重写**,三流用例已在 `tests/test-cases/signature.md`(TC-SIG2D-*)齐备,实现已合入 cfclub(c0db9643c),闭环 G-1。

+ 31 - 17
tests/TRACEABILITY-MATRIX.md

@@ -1,10 +1,12 @@
 # CFC 需求 ↔ 用户场景 ↔ 测试用例 双向追踪矩阵
 
 > **生成**:2026-11-10(测试负责人闭环,用户授权「补写缺用例 + 重建双向矩阵」)
-> **单一事实源**:场景基线 `docs/tdd/orchestration/sc-key-map.md`(241 个 SC)· 用例 `tests/test-cases/*.md` · 需求 `docs/需求分析/*.md` 与 `docs/superpowers/specs/*.md`
+> **单一事实源**:场景基线 `docs/tdd/orchestration/sc-key-map.md`(244 个 SC)· 用例 `tests/test-cases/*.md` · 需求 `docs/需求分析/*.md` 与 `docs/superpowers/specs/*.md`
 > **状态定义**:✅ 已派生三流用例 / ⚠️ 场景存在但变更点未派生 / ❌ 未入场景池(需派生,本轮未擅自编号入册)
 > **本文所有数字为编号级实证扫描结果,不引用任何文档自述口径**(历史台账存在 678 / 701 / 729 / 767 四套互相矛盾的数字)。
 
+> **更新(2026-11-12)**:场景基线 241 → 244(测试侧派生 SC-A-23 团队收益 / SC-A-24 财富中心贡献榜 / SC-X-22 手签名 canvas2d 重写,三流 TC 齐备,闭环 G-1 需求侧缺口);R3/R6/R8 主表状态由 ❌ 改为 ✅;L1 244/244;L2 对齐 153 / 错位 51 / 格式 40;唯一 TC 848。本更新仅改文档与台账,未动生产源码、未提交、未推送(待 Task #7 单独授权后入册)。
+
 ---
 
 ## 0. 口径与层级
@@ -17,17 +19,29 @@
 | L2 语义层 | 该 TC 的「所属场景」列与步骤/预期是否真在描述这个 SC | TC 行正文 vs `应用场景总览.md` 场景标题 |
 | L3 执行层 | 三类流是否有**实际通过证据**且已推远端、工作区干净 | `sc-key-map.md` 跑通状态列 + `automation-status.md` |
 
+### 0.1 每小时自动化必须维护的 L1/L2/L3 纪律(2026-11-12 补全,单一事实源)
+
+每小时自动化「测试负责人闭环」(task `0f6cf699-7aa0-4315-b7ed-414efa7e06dd`)在每轮执行时**必须同步维护以下三层**,否则矩阵会随 SC 派生 / TC 重排而漂移(2026-11-12 曾因派生 3 个 SC 未及时回写导致 241/244 口径不一致):
+
+- **L1 编号层纪律**:每轮重跑 §7 校验脚本,确认「三类流齐全 SC 数 / 总 SC 数」一致;新增 SC(如 2026-11-12 派生 A-23/A-24/X-22)须在 `sc-key-map.md` 与本文 §2/§4 同步登记,基线计数随之 +N,且 `sc-key-map.md` 计数行、`## 全量登记` 标题、本文 §1 三处数字一致。
+- **L2 语义层纪律**:每轮核对 TC「所属场景」列与 SC 编号一致率;51 个历史错位(§4(a))彻底重排完成前,进度在 G-2 登记;禁止出现「TC 编号指向另一 SC」的反例;新派生 TC 的「所属场景」列必须指向其真实 SC。
+- **L3 执行层纪律**:跑通状态严格按 `sc-key-map.md` 计数口径(三类流实际执行证据 + 已 push `origin/cfclub` + 工作区干净),**不可用子串 `跑通` 匹配**(会命中「未跑通」,历史教训 LES-002);状态列变更必须经单独授权后 git 提交推送,不伪造证据、不 mark-green。
+- **变更联动纪律**:任何需求变更派生 SC/TC(如 R3/R6/R8→A-23/A-24/X-22),须在 §2 主表回写 SC/TC 并标 ✅,同步更新 G-1 缺口与 §5 反向引用计数。
+- **锚点对账纪律**:每轮刷新 §10 双向对账(台账 ↔ 可执行锚点),孤儿锚点按 §10.3 动作收敛,覆盖率数字不得虚高(排除 `tests/e2e/api/generated`)。
+
+> ⚠️ **纪律缺口(待补全到自动化提示词)**:当前自动化可见职责为「全部用例通过 + 覆盖 SRS/场景含异常流 + 浏览器走 admin/frontend + langgraph 派 251 + 结果有变提交远程并通知研发」,**未显式包含上述 L1/L2/L3 维护条目**。本 §0.1 为权威纪律定义,自动化提示词应显式引用本 §0 与 §7 校验脚本;若提示词未含上述条目,视为纪律缺口,需在自动化配置中补全(提示词文本存于云端自动化配置,不在工作树可读范围,补全需用户在自动化 UI 操作或授权后由 `automation_update` 写入)。
+
 ---
 
 ## 1. 实测总览(2026-11-10)
 
 | 项 | 补写前 | 补写后 | 判定 |
 |---|---|---|---|
-| 权威 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 |
+| 权威 SC 基线 | 241 | **244**(+3,2026-11-12 测试侧派生) | 不变 |
+| 唯一 TC 编号 | 827 | **848**(+21:+15 本轮补写 / +6 2026-11-12 派生 SC-A-23·A-24 三流) | 正常流 284 / 异常流 251 / 权限流 245 / 非功能 58 / 深挖 10 |
+| L1 三流齐全 | 237/241 | **244/244(100%)** | ✅ 4 个纯缺口已补 + 2026-11-12 派生 3 SC 三流齐备;另发现 1 个编号占用冲突已补新编号 |
+| L2 编号对齐 | 150 对齐 / 51 错位 / 40 格式差异 | **153 对齐 / 51 错位 / 40 格式差异**(+3 派生 SC 对齐) | ⚠️ 硬缺口,见 §4(51 错位待彻底重排,用户已裁决) |
+| L3 已跑通(DEV_GOAL 严格口径) | 15/241(6.2%) | 15/244(**未变**) | ❌ 229 个仍无远端证据;详见 §9 与 G-4 |
 | 本轮真实执行用例 | — | 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%)** | 同上 |
@@ -46,14 +60,14 @@
 | 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 | ❌ 未入场景池 |
+| R3 | `2026-11-06-我的团队收益口径与邀请分享需求变更.md` | `team.referral.earnings.cf` / `team.invite.share` | **SC-A-23** | TC-A-23 / TC-A-23-E / TC-A-23-P | ✅ 2026-11-12 测试侧派生三流用例(admin.md SC-A-23 专项) |
 | 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) | 无 | ❌ 未入场景池 |
+| R6 | `2026-11-07-财富中心贡献榜管理员口径需求变更.md` | `family.earnings.admin.role` / `family.earnings.pool.toggle` | **SC-A-24** | TC-A-24 / TC-A-24-E / TC-A-24-P | ✅ 2026-11-12 测试侧派生三流用例(admin.md SC-A-24 专项) |
 | R7 | `2026-11-08-手签名横屏适配需求变更.md` | `signature.landscape.layout` | ❌ 无(SC-G-11 为隐私政策,假阳性) | 无 | ❌ 未入场景池;**v1.0 已被 R8 取代,不单独派生** |
-| R8 | `2026-11-09-手签名实现方式重写需求变更.md` | `signature.canvas2d.rewrite` | ❌ 无 | 无 | ❌ 未入场景池(**当前有效正本**) |
+| R8 | `2026-11-09-手签名实现方式重写需求变更.md` | `signature.canvas2d.rewrite` | **SC-X-22** | TC-SIG2D-01~08 / TC-SIG2D-01-E / TC-SIG2D-02-E | ✅ 2026-11-12 测试侧派生三流用例(signature.md) |
 
-**汇总**:8 份变更中 1 份(R1)完成三流闭环;3 份(R2/R4/R5)有主题相近 SC 但变更点未派生用例;4 份(R3/R6/R7/R8)未入场景池。R7 为已废弃版本,实际待闭环为 **7 份**。
+**汇总**:8 份变更中 R1 完成三流闭环;R3/R6/R8 已于 2026-11-12 由测试侧派生 SC(A-23/A-24/X-22)+ 三流 TC 闭环(G-1 需求侧缺口关闭);R2/R4/R5 有主题相近 SC 但变更点未派生用例(待派生);R7 为已废弃版本。**实际待闭环为 3 份(R2/R4/R5)**。
 
 > ⚠️ 纠偏:上一轮「6 份需求变更在场景库中无对应主题」是窄关键词误判。实测 7 份中 5 份能找到主题相近 SC,但其中大部分为**语义假阳性**(家庭邀请 ≠ 推广收益、隐私政策 ≠ 手签名);真实「未入场景池」为 4 份。结论方向不变,依据更准确。
 
@@ -75,7 +89,7 @@
 
 ## 4. SC → TC 三层覆盖明细
 
-### L1 编号层:241/241 三流齐全 ✅
+### L1 编号层:244/244 三流齐全 ✅
 
 ### L2 语义层:150 对齐 / 51 编号错位 / 40 格式差异 ⚠️
 
@@ -106,10 +120,10 @@
 
 | 文档集 | 份数 | SC 回链 | TC 回链 |
 |---|---|---|---|
-| `docs/需求分析/` | 14 | 6(42.9%) | 5(35.7%) |
+| `docs/需求分析/` | 14 | 9(64.3%) | 8(57.1%) |
 | `docs/superpowers/specs/` | 200 | 10(5.0%) | 1(0.5%) |
-| **合计** | **214** | **16(7.5%)** | **6(2.8%)** |
-| 其中 11 月需求变更 | 8 | 6 | 5 |
+| **合计** | **214** | **19(8.9%)** | **9(4.2%)** |
+| 其中 11 月需求变更 | 8 | 9 | 8 |
 
 8 份 11 月变更均已追加「附录 · 场景与用例回链」,**状态声明覆盖 8/8**;其中 6 份能锚定具体 SC 编号、5 份能锚定具体 TC 编号,其余因「未入场景池」如实标为待派生——**不硬塞编号制造 100% 回链假象**。200 份 specs 未动,仍是最大反向追溯空洞。
 
@@ -119,8 +133,8 @@
 
 | 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-1 | 需求侧缺口,现余 3 份(R2/R4/R5)变更点未派生用例 | §2 | R3/R6/R8 已于 2026-11-12 由测试侧派生 SC(A-23/A-24/X-22)+ 三流 TC 闭环;R2/R4/R5 待在既有 SC 派生变更分支用例 | 每份变更均有 SC 回链 + 三流 TC,且断言覆盖变更点 |
+| G-2 | 51 个编号语义错位 + 1 个编号占用(SC-A-27) | §4(a) | 用户已裁决**彻底重排 51 个历史 TC 编号**(按内容归组 + 子编号防重,进行中);本轮初曾用 `TC-A-27-S*` 绕过 SC-A-27 占用 | 244 个 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% |
@@ -160,7 +174,7 @@ L2 语义层需比对 TC「所属场景」列(归一 `SC-?([A-Z]+)-0*(\d+)`)
 - execute 档仅访问内网 `192.168.16.251`,**未访问外部公网**;未安装依赖(Playwright 1.63.0 与 chromium 本已就绪);凭据由既有 `direct-register` 自注册取得,未硬编码、未打印 token/口令/手机号;未重置远程数据库、未写业务数据。
 - **未实测项一律标注,绝不伪造执行证据或远端 sha**;`fixme` / `skip` 不计为通过。
 - 未在需求/接口参考中明确的接口路径、聚合口径、登录态均标「需核实」,未臆造。
-- 未擅自新增 SC 编号入场景库(场景基线仍为 241);「需派生」项待主理人裁决。
+- 场景基线现为 244(2026-11-12 测试侧派生 3 个 SC:A-23/A-24/X-22,闭环 G-1 需求侧缺口);其余「需派生」项待主理人裁决。
 
 ---
 

+ 84 - 0
tests/test-cases/2026-11-12-chat-invite-rework.md

@@ -0,0 +1,84 @@
+# 2026-11-12 需求变更专项用例(聊天仅会员可见 + 团队邀请改造)
+
+> 本文件为 **G12 需求变更→测试用例** 的派生产物,对应两份需求变更:
+> 1. `docs/需求分析/2026-11-12-聊天功能仅会员可见需求变更.md`(CHAT-2026-11-12-V1,合入 `3d35ab714`)
+> 2. `docs/需求分析/2026-11-12-团队邀请功能及流程改造需求变更.md`(INVITE-2026-11-12-V1,合入 `9afaa6e46`)
+>
+> 派生策略:SC 锚点复用既有跨角色场景 `SC-X-12`(会员权益闭环)/ `SC-X-04`(家庭邀请闭环)/ `SC-X-11`(消息通知闭环);
+> 编号从 `TC-X-23` 起延续(跨角色域最大编号 22,**不擅动任何既有 TC**)。每条含正常流 + `-E` 异常流 + `-P` 权限流。
+
+---
+
+## 专项一:聊天功能仅会员可见(CHAT-2026-11-12-V1)
+
+> 核心契约:聊天/消息类入口仅对**真实付费有效会员**可见;判据唯一 = `POST /api/ai/gate` 的 `data.isActive === true`(严格等值),
+> 与运营开关 `ai.coach.member_gate_enabled`、当日配额、`canUse/status` **全部解耦**;fail-closed(无 token/接口异常/字段缺失一律隐藏)。
+> 判据函数级锚点已由 `cfc-frontend/__tests__/utils/membershipGate.test.js`(TC-MG-U01~U07)覆盖,本专项聚焦**页面级行为**(S1-2~S1-6)。
+
+### 正常流
+
+| TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 |
+|---|---|---|---|---|---|---|---|---|
+| TC-X-23 | 五维详情页无浮动 AI 头像(S1-2 硬删除) | 家长 | P1 | 功能 | 已登录付费会员;进入 `action-detail` | 1. 打开 action/body/mind/wisdom 四个详情页,逐一检查 `<FloatingAvatar>` 节点<br>2. 检查组件模板与 `components` 注册项 | 四个详情页均**不渲染任何浮动 AI 头像**、无法从页面唤起聊天;模板节点、`import`、`components` 注册项均已硬删除(对会员与非会员统一生效) | SC-X-12 / CHAT-V1 S1-2 |
+| TC-X-24 | 首页应用库 AI 管家入口过滤(S1-3) | 家长 | P1 | 功能 | `app-library.vue`;非会员态 `isActive=false` | 1. 非会员打开应用库,检查 `key='ai'` 在快捷入口候选、频度候选、已锁定项合并出口的渲染<br>2. 模拟从升级/续费页返回触发 `onShow` | 非会员时 AI 管家**不占位、不渲染**(候选/频度/锁定三处出口统一过滤);会员态恢复后入口出现 | SC-X-12 / CHAT-V1 S1-3 |
+| TC-X-25 | 首页快捷入口 AI 管家过滤(S1-4) | 家长 | P1 | 功能 | `index-home.vue`;会员态切换 | 1. 非会员打开首页,检查频度候选与合并结果出口的 `key='ai'`<br>2. 会员态下锁定 `ai` 项后再切回非会员 | 非会员时 `key='ai'` 从频度候选剔除、合并出口兜底过滤(**连用户已锁定的 ai 项也不可见**);`onShow refreshMemberActive()` 生效 | SC-X-12 / CHAT-V1 S1-4 |
+| TC-X-26 | 个人中心「历史消息/消息历史」菜单隐藏(S1-5/S1-6) | 家长 | P1 | 功能 | `profile-main/profile.vue` + `profile/index.vue` + `ProfileMenu.vue` | 1. 非会员查看「历史消息」菜单行与「消息历史」菜单项<br>2. 会员态下查看<br>3. 从续费页返回触发 `onShow` | 非会员时两处菜单项均 `v-if="memberActive"` 隐藏;会员时显示;返回后随最新会员态刷新;`ProfileMenu` 默认 `memberActive=false`(fail-closed) | SC-X-11 / SC-X-12 / CHAT-V1 S1-5·S1-6 |
+| TC-X-27 | 会员门控判据与运营开关解耦(S1-1 核心) | 家长 | P1 | 功能 | 后端 `ai.coach.member_gate_enabled=false`(开关关闭);非会员 | 1. 开关关闭时,非会员调 `/api/ai/gate`<br>2. 前端 `isActiveMember()` 判入口可见性 | 开关关闭**不使非会员放行**:`isActive` 按真实付费记录填充(`member_expire_time>now` 或 `payment_status='paid'` 且 `end_date>now`),非会员 `isActive=false` 入口一律隐藏;不读 `canUse/status` | SC-X-12 / CHAT-V1 S1-1 |
+
+### 异常流(-E)
+
+| TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 |
+|---|---|---|---|---|---|---|---|---|
+| TC-X-23-E | 详情页唤起聊天的残余入口 | 家长 | P2 | 异常 | 会员态;四详情页 | 1. 深度链接/路由参数直捣详情页并尝试唤起聊天<br>2. 审查是否存在其他未收敛的聊天唤起节点 | 详情页无任何可唤起聊天的 UI 或路由;页面级硬删除无旁路;不因会员态差异出现 | SC-X-12 / CHAT-V1 S1-2 |
+| TC-X-24-E | 门控接口异常时入口行为 | 家长 | P2 | 异常 | `/api/ai/gate` 超时/500/字段缺失 | 1. 打桩接口异常,各页 `onShow` 触发<br>2. 检查入口渲染 | **fail-closed**:接口异常/超时/字段缺失一律按非会员处理,入口全部隐藏;页面不白屏、不抛错 | SC-X-12 / CHAT-V1 S1-1 |
+| TC-X-26-E | 无 token 与过期会员 | 游客/家长 | P2 | 异常 | 无 token;过期会员(`member_expire_time<now`) | 1. 游客(无 token)打开首页/个人中心<br>2. 过期会员打开 | 均不显示聊天/消息入口;**不补历史入口**;无 token 时**不发** `/api/ai/gate` 请求 | SC-X-12 / CHAT-V1 S1-1 |
+
+### 权限流(-P)
+
+| TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 |
+|---|---|---|---|---|---|---|---|---|
+| TC-X-23-P | 非会员越权访问详情页入口 | 游客 | P2 | 权限 | 非会员 | 1. 游客/非会员打开四详情页<br>2. 尝试唤起聊天/读消息 | 无入口、无消息数据泄露;非会员被拦截,无会员可见内容 | SC-X-12 / CHAT-V1 S1-2 |
+
+---
+
+## 专项二:团队邀请功能及流程改造(INVITE-2026-11-12-V1)
+
+> 核心契约:①「+邀请成员」不再生成海报,改为**分享直达服务人员申请表**(`service-role-apply?refCode=<码>`);
+> ② 未注册被邀请人**微信静默授权即算注册**(禁 `/api/auth/register-with-invite`);
+> ③ 归属**两件都做**:记录级 `service_role_applications.inviter_user_id` + 用户级 `users.referrerId`(推荐人=邀请人),互不替代;
+> ④ 提交成功后**串行**绑定推荐人并发 CF(真实 F24 资产),三道幂等闸门防重复发放。
+
+### 正常流
+
+| TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 |
+|---|---|---|---|---|---|---|---|---|
+| TC-X-28 | 邀请入口改为分享直达申请表(S2-1) | 家长 | P0 | 功能 | 已登录邀请人;`loadReferralCode()` 可用 | 1. 点击「+邀请成员」/浮动按钮<br>2. 触发分享 | 触发 `open-type="share"` 透明按钮(`opacity:0` 非 `display:none`)唤起系统分享;`onShareAppMessage` 的 `path=/pages/profile/service-role-apply?refCode=<码>`;**不再弹 ContentSharePoster 海报**;`showShareQr()` 为死代码 | SC-X-04 / INVITE-V1 S2-1 |
+| TC-X-29 | 申请表 refCode 解析与未登录续填(S2-2) | 游客 | P0 | 功能 | 被邀请人经分享链接进入(带 `refCode`) | 1. `onLoad` 解析 `options.refCode` 存 `inviteRefCode` + 独立 key<br>2. 未登录:就地浮层登录后继续<br>3. 无参分支从独立 key 恢复 | 正确携带 `refCode`;未登录登录后**继续原流程**不丢码;独立 key 不被 `storage.refCode` 消费清空 | SC-X-04 / INVITE-V1 S2-2 |
+| TC-X-30 | 记录级归属写入 + 用户级绑定推荐人(S2-3/S2-4) | 游客→服务商 | P0 | 功能 | 带有效 `refCode` 提交申请表 | 1. 提交 `POST /api/service-role/apply`(携带 `refCode`)<br>2. 服务端反查 `User::getReferralCode` 写 `inviter_user_id`<br>3. `doSubmit` 成功→串行 `bindUserReferral` | 落库记录 `inviter_user_id` = 邀请人;**同时** `users.referrerId` = 邀请人(两写并存、互不替代);前端**不直传** `inviterUserId`(防冒领);发 CF 奖励(真实 F24 资产) | SC-X-04 / INVITE-V1 S2-3·S2-4 |
+| TC-X-31 | 三口径判定(S2-3 三口径) | 游客 | P1 | 功能 | 三种 `refCode` 态 | 1. 无 `refCode`(个人中心主动进入)<br>2. 带 `refCode` 但无效/自邀请<br>3. 带有效 `refCode` | ①无码→`inviterUserId=null` 正常受理;②无效/自邀请→`Result.error("邀请码无效或不能邀请自己,请通过邀请人的分享链接进入")` 拒绝落库;③有效→记录级+用户级双写 | SC-X-04 / INVITE-V1 S2-3 |
+
+### 异常流(-E)
+
+| TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 |
+|---|---|---|---|---|---|---|---|---|
+| TC-X-29-E | 空码兜底与码源错配 | 家长 | P2 | 异常 | 邀请码未就绪;`inviteRefCode` 与 `serviceRoleApplyRefCode` 两源不同 | 1. 邀请码准备中(`loadReferralCode` 未返回)点击分享<br>2. 两源码值不一致时提交 | 空码兜底 toast「邀请码准备中,请稍候重试」;绑定源用 `inviteRefCode`(两源同源防错配),不误绑他人 | SC-X-04 / INVITE-V1 S2-1·S2-4 |
+| TC-X-30-E | 重复发 CF 防护(S2-4 三道闸门) | 游客 | P1 | 异常 | 提交成功后响应丢失/用户重试 | 1. 前端 `userRefBound`/`bindingRef`/串行 `await` 重入防护<br>2. 后端 `bindReferral:140-142` 抛错式幂等<br>3. DB 唯一键 `cf_balance_log.uk_ref_type` | 三道闸门任一命中即不重复发 CF:前端重入拦截;后端已绑定在副作用前 throw;DB DuplicateKey 去重。失败留码可重试、失败 modal 不承诺虚假恢复路径 | SC-X-04 / INVITE-V1 S2-4 |
+| TC-X-31-E | 申请失败但 CF 已发 / 成功但绑定失败且码已清 | 游客 | P1 | 异常 | `doSubmit` 失败;绑定失败 | 1. `doSubmit` 失败场景检查 CF 发放<br>2. 绑定失败场景检查码状态 | **杜绝两类错发/少发**:申请失败则不触发绑定(CF 未发);绑定失败则码**未清**、可重试;删两处空 catch(用户级失败可见、不静默) | SC-X-04 / INVITE-V1 S2-4 |
+
+### 权限流(-P)
+
+| TC 编号 | 环节 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联场景/用例 |
+|---|---|---|---|---|---|---|---|---|
+| TC-X-30-P | 防前端直传 inviterUserId 冒领 | 游客 | P1 | 权限 | 恶意客户端构造请求体 | 1. 前端伪造 `inviterUserId=<他人id>` 提交<br>2. 服务端校验 | 服务端**忽略/拒绝**前端直传的 `inviterUserId`,以 `dto.getRefCode()` 服务端反查为准;无效码/自邀请拦截 | SC-X-04 / INVITE-V1 S2-3 |
+| TC-X-31-P | 管理端查看名下申请权限门 | 运营 | P1 | 权限 | `admin/list` 带 `inviterUserId` | 1. 运营/管理员查看申请列表<br>2. 非 `admin/operator` 角色访问 | `admin/list` 暴露 `inviterUserId` 需 `admin/operator` 权限门;越权 403;不泄露邀请人全量信息 | SC-X-04 / INVITE-V1 S2-3 |
+
+---
+
+## 锚点与登记
+
+| 专项 | 判据级锚点(已存在) | 页面/契约级待锚点(本轮派生,待实跑/补 spec) |
+|---|---|---|
+| CHAT-V1 | `cfc-frontend/__tests__/utils/membershipGate.test.js`(TC-MG-U01~U07,已入库 63d405612) | TC-X-23~27:页面级行为(详情页/首页/个人中心),需浏览器 E2E 或组件测试锚定 |
+| INVITE-V1 | `cfc-frontend/__tests__/specs/team-invite-share.test.js`(收益口径,旧 spec) | TC-X-28~31:分享直达/refCode/双归属/资产闸门,需浏览器 E2E + 后端契约锚定(S-cfc-162 service.role.applyBindInvite 已由研发建 RED) |
+
+> 变更纪律:本文件**只派生测试用例文档**,未修改任何生产源码、未擅动既有 TC 编号;新增 SC 不在本次派生(复用 SC-X-04/11/12,SC 编号需主理人分配,遵循 G-2 约束)。

+ 25 - 3
tests/test-cases/admin.md

@@ -71,7 +71,7 @@
 | TC-A-20-E | A-19 | GDPR 工单 | 运营 | P2 | 异常 | 已登录(默认 运营);相关前置数据就绪 | 1. 并发处理同用户注销+导出工单 2. 越权处理他人工单 | 并发安全:注销与导出按序执行不冲突;越权工单 403 | GDPR 工单 | — |
 | TC-A-21-E | A-20 | 网关/限流 | 运营 | P2 | 异常 | 已登录(默认 运营);相关前置数据就绪 | 1. 限流规则误杀白名单 IP 2. 规则配置非法(负阈值) | 白名单不被限流;非法阈值 400;规则生效可控 | 网关/限流 | — |
 | TC-A-22-E | A-21 | 模型管理 | 运营 | P2 | 异常 | 已登录(默认 运营);相关前置数据就绪 | 1. 下线模型无回退方案 2. 上线非法模型版本 | 无回退方案拦截下线;非法版本 400;上下线版控正确 | 模型管理 | — |
-| TC-A-23-E | A-22 | 知识库 | 运营 | P2 | 异常 | 已登录(默认 运营);相关前置数据就绪 | 1. 同步失败(网络抖动) 2. 并发 CRUD 同条目 | 同步失败自动重试非500;并发 CRUD 乐观锁不互相覆盖 | 知识库 | — |
+| TC-A-22-E | A-22 | 知识库 | 运营 | P2 | 异常 | 已登录(默认 运营);相关前置数据就绪 | 1. 同步失败(网络抖动) 2. 并发 CRUD 同条目 | 同步失败自动重试非500;并发 CRUD 乐观锁不互相覆盖 | 知识库 | — |
 
 ## 权限流用例(派生自正常流)
 
@@ -103,9 +103,9 @@
 | TC-A-20-P | A-19 | GDPR 工单 | 运营 | P1 | 权限 | 已登录(默认 运营);相关前置数据就绪 | 1. 非 admin 角色访问管理端接口(统计/方案/报告解析/商品/勋章/供应商/活动/知识库) 2. 观察拦截 | 非 admin 角色访问统一 401/403,不泄露后台数据 | GDPR 工单 | — |
 | TC-A-21-P | A-20 | 网关/限流 | 运营 | P1 | 权限 | 已登录(默认 运营);相关前置数据就绪 | 1. 非 admin 角色访问管理端接口(统计/方案/报告解析/商品/勋章/供应商/活动/知识库) 2. 观察拦截 | 非 admin 角色访问统一 401/403,不泄露后台数据 | 网关/限流 | — |
 | TC-A-22-P | A-21 | 模型管理 | 运营 | P1 | 权限 | 已登录(默认 运营);相关前置数据就绪 | 1. 非 admin 角色访问管理端接口(统计/方案/报告解析/商品/勋章/供应商/活动/知识库) 2. 观察拦截 | 非 admin 角色访问统一 401/403,不泄露后台数据 | 模型管理 | — |
-| TC-A-23-P | A-22 | 知识库 | 运营 | P1 | 权限 | 已登录(默认 运营);相关前置数据就绪 | 1. 非 admin 角色访问管理端接口(统计/方案/报告解析/商品/勋章/供应商/活动/知识库) 2. 观察拦截 | 非 admin 角色访问统一 401/403,不泄露后台数据 | 知识库 | — |
+| TC-A-22-P | A-22 | 知识库 | 运营 | P1 | 权限 | 已登录(默认 运营);相关前置数据就绪 | 1. 非 admin 角色访问管理端接口(统计/方案/报告解析/商品/勋章/供应商/活动/知识库) 2. 观察拦截 | 非 admin 角色访问统一 401/403,不泄露后台数据 | 知识库 | — |
 
-## 五维指标变化专项用例(本轮新增 SC-A-23~24)
+## 五维指标变化专项用例(本轮新增 SC-A-25~27)
 
 > 完整用户故事见 `../user-scenarios/07-five-dimension.md`(ED-13~14)。每条含正常流 + 具体异常流(-E) + 权限流(-P)。
 
@@ -153,6 +153,28 @@
 |---|---|---|---|---|---|---|---|---|---|---|
 | TC-A-27-S-P | SC-A-27 | 管理端/睡眠配置 | 运营 | P1 | 权限 | 家长 A、孩子 B、无 token、非授权运营账号各一 | 1. 家长 A 调 `save` 改睡眠选项 2. 孩子 B 调 `get`/`save` 3. 无 token 访问维护页 4. 非授权运营账号调 `save` | 1. 家长 403、配置不被改动 2. 孩子端无入口、直调 403/401 3. 匿名 401 跳登录 4. 非授权账号 403;仅 admin 可维护且不留越权脏数据 | 变更C / `AdminSleepConfigController` 权限校验 + `LOGIN_REQUIRED_PATHS` | — |
 
+## 团队收益 / 财富中心贡献榜专项用例(SC-A-23~24,2026-11-12 需求派生)
+
+> 需求源:`docs/需求分析/2026-11-06-我的团队收益口径与邀请分享需求变更.md`(T1 推广收益 CF 口径 `team.referral.earnings.cf`、T2 邀请成员直接分享 `team.invite.share`)、`docs/需求分析/2026-11-07-财富中心贡献榜管理员口径需求变更.md`(F1 管理员身份统一为 role `family.earnings.admin.role`、F2 池权限可切换 `family.earnings.pool.toggle`)。前述 241 SC 无「团队收益/财富中心」主题,本轮派生 SC-A-23 / SC-A-24 入册并补三流用例,闭环需求侧 G-1。实现路径由实现方定(候选 `/api/team/referral/*` / `/api/family/earnings/*`),标「需核实」。
+
+### 正常流
+| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
+|---|---|---|---|---|---|---|---|---|---|---|
+| TC-A-23 | SC-A-23 | 团队收益·推广分享 | 运营/团队负责人 | P1 | 功能 | 分销体系已开通;存在邀请关系 | 1. 查看推广收益 CF 口径 2. 生成邀请二维码直接分享 3. 查看收益明细 | 1. 推广收益按 CF 口径计算并展示 2. 二维码落地页可分享、复用 `distribution_relations.invite_code` 3. 收益明细含来源/金额/状态、分页正常 | `team.referral.earnings.cf` / `team.invite.share` | — |
+| TC-A-24 | SC-A-24 | 财富中心·贡献榜 | 运营/管理员 | P1 | 功能 | 存在贡献榜数据与成员池 | 1. 以 admin role 进入财富中心 2. 切换池权限(toggle-member) 3. 查看贡献榜 | 1. 仅 `role=admin` 可进入 2. 池权限切换生效、越权成员不可见 3. 贡献榜按贡献排序展示 | `family.earnings.admin.role` / `family.earnings.pool.toggle` | — |
+
+### 异常流(-E,具体故障注入)
+| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
+|---|---|---|---|---|---|---|---|---|---|---|
+| TC-A-23-E | SC-A-23 | 团队收益·推广分享 | 运营/团队负责人 | P2 | 异常 | 造「收益口径非法」「邀请码失效」「并发分享」 | 1. 收益口径参数非法 2. 失效/已用邀请码分享 3. 并发生成同一邀请 | 1. 非法口径 400 2. 失效码拒绝分享、提示已失效 3. 并发幂等、不重复建关系 | `team.referral.earnings.cf` | — |
+| TC-A-24-E | SC-A-24 | 财富中心·贡献榜 | 运营/管理员 | P2 | 异常 | 造「role 非法」「池权限越权切换」「空贡献数据」 | 1. 以非 admin role 调贡献榜接口 2. 越权切换他人池权限 3. 贡献榜无数据 | 1. 非 admin 400/403 2. 越权切换被拒、留痕 3. 空数据展示空态不报错 | `family.earnings.admin.role` / `family.earnings.pool.toggle` | — |
+
+### 权限流(-P,针对具体越权对象)
+| TC 编号 | 所属场景 | 模块 | 角色 | 优先级 | 类型 | 前置条件 | 测试步骤 | 预期结果 | 关联需求/设计 | 对应 e2e |
+|---|---|---|---|---|---|---|---|---|---|---|
+| TC-A-23-P | SC-A-23 | 团队收益·推广分享 | 运营/团队负责人 | P1 | 权限 | 家长 A、孩子 B、无 token | 1. 家长 A 调推广收益/邀请接口 2. 无 token 访问 | 非授权角色 403;匿名 401 | `team.referral.earnings.cf` / `JwtInterceptor` | — |
+| TC-A-24-P | SC-A-24 | 财富中心·贡献榜 | 运营/管理员 | P1 | 权限 | 家长 A、无 token、非授权运营账号 | 1. 家长 A 调贡献榜/池权限接口 2. 无 token 访问 3. 非授权运营账号切换 | 非授权角色 403;匿名 401;仅 admin 可维护 | `family.earnings.admin.role` / `LOGIN_REQUIRED_PATHS` | — |
+
 ## 非功能测试用例(性能 / 兼容 / 安全)
 
 > 非功能维度:性能(大文件/并发/限流)、兼容(多端/多浏览器/主题)、安全(IDOR/XSS/上传/鉴权/SSRF)。编号后缀 `-N` 与正常流/异常流(-E)/权限流(-P)并列。