Browse Source

docs(tdd): 跨角色域剩余 8 SC 契约补建开工包(EVD-15 前置)· 研发负责人 闭环巡检

Agnes Agent 5 ngày trước cách đây
mục cha
commit
9f0da8727
1 tập tin đã thay đổi với 45 bổ sung và 0 xóa
  1. 45 0
      docs/tdd/orchestration/cross-role-kickoff-20261107.md

+ 45 - 0
docs/tdd/orchestration/cross-role-kickoff-20261107.md

@@ -0,0 +1,45 @@
+# 跨角色域批次 · 开工包(X 域剩余 8 SC 契约核对)
+
+> 归属:契约补建计划 P0「跨角色域剩余」· 生成 2026-11-07 12:0x(研发负责人 闭环巡检)
+> 数据源:sc-key-map.md(origin/cfclub,O-8 归一后 241 全量登记)· 端点核对:cfc-backend controller 源码(origin/cfclub 工作树)
+> 前置:O-7 裁决(主理人 2026-11-06 23:59 最终确认)契约补建工作流正式生效——契约核对 = 文档核对 + 端点比对(防假 RED),产出契约文档后转测试侧补契约 JUnit + 三类流证据,**渐进而非全量**。
+
+## 批次定位
+
+跨角色域 22 个 SC(SC-X-01~22)中,已由既有开工包覆盖 **13 个**:
+- 测评-方案(EVD-8R):SC-X-01 / 06 / 09
+- 报告闭环(EVD-7R):SC-X-02 / 10 / 13
+- 任务-心愿(EVD-3):SC-X-05
+- 五维能量(EVD-5):SC-X-19 / 20 / 21
+- 商城-会员(EVD-4):SC-X-07 / 12
+- 家庭-成员(EVD-2):SC-X-04
+- CF 值预估(TR-5 独立键):SC-X-22 已由 `reward.cfEstimate.expectedCf` 实现合入(`f14e46f84`,12 Java 文件)+ 契约合入(`6141c43a2`),**非契约补建批**(测试侧补三类流证据即可)。
+
+**本批 = X 域剩余 8 个 SC(SC-X-03/08/11/14/15/16/17/18)**,端点载体逐条核验,产出契约文档后转测试侧,不建伪实现任务。
+
+## 端点核验(初核候选,会话须逐条核实并回填)
+
+| SC | 场景标题 | 候选端点载体(origin/cfclub 工作树) | 初核 |
+|----|----------|--------------------------------------|------|
+| SC-X-03 | 双角色数据隔离越权 | `family/FamilyMembersController`(成员 CRUD/权限)、`family/TeacherFamilyBindingController`(规划师绑定)、`family/ParentController`(家长视角切换)、`auth/AuthController`(角色切换 switchRole);越权语义 = 家长/孩子/规划师跨家庭访问须 403 | ✅ |
+| SC-X-08 | 文章发布闭环 | `content/ArticleController` `/api/article/*`(发布/详情)、`content/ArticleCategoryController`(分类)、`content/ArticleCommentController`(评论)、`admin/AdminArticleController` `/api/admin/article/*`(审核)、`admin/ReviewCenterController`(审核中心);闭环 = 发布→审核→上架→评论 | ✅ |
+| SC-X-11 | 消息通知闭环 | `product/ProductOrderController`(下单通知)、`ActivityOrderController`(报名通知)、`VirtualPayController`(支付通知)、`admin/AdminNotificationTemplateController`(通知模板配置);闭环 = 事件触发→通知发送→用户已读 | ⚠ 通知发送载体(推送通道)待核实 |
+| SC-X-14 | 解绑/重分配跨角色协同 | `family/BindController`(家庭绑定/解绑)、`family/FamilyInviteController`(邀请重分配)、`CfTransferController`(CF 转移);协同 = 规划师/成员解绑后数据重分配 | ✅ |
+| SC-X-15 | 注销/数据导出跨角色 | `UserController` `POST /api/user/data-export`(个保法导出,`AccountCleanupService.exportUserData`)+ 注销端点(`AccountCleanupService` 匿名化);跨角色 = 家长注销后孩子/家庭数据处理 | ✅ |
+| SC-X-16 | 活动名额并发 E2E ⭐ | `ActivityController` `POST /api/activity/register`(名额校验/并发扣减)、`ActivityOrderController`(报名订单);并发语义 = 同名额多端并发报名须不超发 | ✅ |
+| SC-X-17 | 多端登录会话互斥跨端 | `auth/AuthController` `/api/auth/*`(token 签发/校验)、`auth/WechatWebAuthController`(微信 web 登录)、`JwtInterceptor`(token 互斥/多端单点);互斥语义 = 同账号多端登录踢下线/互斥 | ⚠ token 互斥实现位置待核实 |
+| SC-X-18 | 推送跨端送达 | `VirtualPayController`(支付结果推送)、微信订阅消息通道(`subscribeMessage`/模板消息,如 `WxTemplateMessageService`/`WeChatSubscribeService`);跨端 = 小程序/Web/服务端多端送达 | ⚠ 推送通道载体较弱,待核实(可能走 `cfc-langgraph` 或微信开放平台) |
+
+> 注:X-18 初核载体偏弱(仅 VirtualPayController 命中 push 相关),会话须全仓 `grep -rlE "subscribeMessage|templateMessage|pushMessage|sendPush" cfc-backend/src/main/java` + `cfc-langgraph/src` 定位真实推送通道,确无载体的登记为契约缺口(仅登记不实现,回传产品/运维侧确认),不建伪任务。
+
+## 会话要求
+
+1. **端点核对 = 文档核对 + 端点比对**(防假 RED):逐条用 grep 在 `cfc-backend/src/main/java` 实测定位端点载体,回填上表候选是否成立(✅/⚠/❌),确无载体的登记为契约缺口,不建伪实现任务。⚠ 项须回填实测结论(✅ 成立 / ❌ 缺口 / ⚠ 部分存在)。
+2. **先拉取**:开工前 `git fetch origin cfclub` 并基于 `origin/cfclub` 新建分支 `feature/evd15-cross-role-contract`(独立 worktree,不与主工作树 WIP 冲突)。
+3. **产出 2 文件**:`docs/superpowers/specs/2026-11-07-cross-role-contract.md`(新建)+ `docs/superpowers/api/API_REFERENCE.md` 追加跨角色域契约段(章节号 4.64 起,避开 EVD-9 孩子端 4.61 / EVD-12R2 服务商域 4.62 / EVD-13 家长域 4.63)。
+4. **完成后必须 push**:`git push -u origin feature/evd15-cross-role-contract`,汇报 commit sha 与文件清单。
+5. 不改任何业务代码、不改测试文件、不动 `.tdd/`。
+
+## 交付
+
+契约文档 + API_REFERENCE 增补 + commit sha + 逐 SC 端点核对结论(满足/缺口)。