suzmii
39669763fe
实现游戏共创 M3:创作族谱树与衍生列表
- 新增 module-game-distribution/src/lineage.rs:锚点可读性、可见性过滤、稳定排序、上限截断的纯函数,附 15 个单测(复用 M1 的软删除判定,不重写第二套规则)
- 新增公开只读 procedure get_game_distribution_lineage / list_game_distribution_derived_games;锚点必须公开可读(未公开/已软删除/不存在一律按不存在处理),树内只出现未软删除且已公开的节点,不补 null 占位节点
- api-server 新增 GET /games/{id}/lineage 与 /games/{id}/derived(匿名可读、no-store),响应走结构化 DTO,节点键集合由测试钉死,杜绝下发对象键/素材键
- 作者自有游戏聚合追加 forkCount(与公开详情 forkCount 同口径),供「被改编 N」入口使用
- shared-contracts 与 TS 契约新增 LineageNode / LineageResponse / DerivedResponse 三型并登记 DTO 一致性检查
- 前端新增 /games/lineage 族谱页,登记 stage 类型、路由表、页面标题与壳层渲染分支;详情页共创卡新增「查看创作族谱」入口(仅已公开作品)
- 我的作品页新增「被改编 N」行内展开,列出直接子代的标题/作者/代际/状态,含空态与失败重试(仅已公开作品)
- 补前端组件/路由/标题/客户端用例与 api-server 路由、负载映射用例;同步里程碑验收标准与技术方案 §3.4 的锚点可读性口径
2026-10-05 17:30:45 +08:00
..
2026-10-04 00:16:14 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-10-04 00:16:14 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-30 14:07:25 +08:00
2026-09-28 15:53:37 +08:00
2026-09-30 11:51:03 +08:00
2026-09-28 15:07:30 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 15:07:30 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-27 18:57:54 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-10-03 15:40:21 +08:00
2026-09-28 14:16:11 +08:00
2026-10-05 15:35:55 +08:00
2026-09-28 17:28:15 +08:00
2026-09-18 12:15:00 +08:00
2026-09-18 19:34:23 +08:00
2026-09-18 19:34:23 +08:00
2026-09-28 17:40:44 +08:00
2026-09-28 14:16:11 +08:00
2026-10-03 12:50:18 +08:00
2026-09-28 14:16:11 +08:00
2026-10-03 12:35:57 +08:00
2026-10-01 19:19:58 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-10-03 17:18:13 +08:00
2026-09-28 14:16:11 +08:00
2026-10-01 16:30:40 +08:00
2026-10-05 17:30:44 +08:00
2026-09-29 15:04:32 +08:00
2026-10-02 16:03:28 +08:00
2026-10-01 19:19:58 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-10-01 19:19:58 +08:00
2026-10-02 15:23:12 +08:00
2026-09-28 14:16:11 +08:00
2026-09-29 07:08:30 +08:00
2026-09-29 06:18:40 +08:00
2026-10-04 00:16:14 +08:00
2026-09-28 14:16:11 +08:00
2026-09-29 06:27:04 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-10-04 00:16:14 +08:00
2026-09-28 14:16:11 +08:00
2026-09-29 06:18:40 +08:00
2026-09-30 14:07:25 +08:00
2026-09-28 15:53:37 +08:00
2026-09-30 11:51:03 +08:00
2026-09-28 15:24:45 +08:00
2026-09-28 15:59:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-29 13:55:06 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-27 18:56:44 +08:00
2026-09-27 19:01:00 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-09-30 19:42:13 +08:00
2026-09-28 14:16:11 +08:00
2026-10-05 15:35:55 +08:00
2026-09-28 19:52:16 +08:00
2026-09-30 13:35:14 +08:00
2026-09-20 20:44:12 +08:00
2026-09-18 19:34:23 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 17:40:21 +08:00
2026-09-28 14:16:11 +08:00
2026-10-02 20:50:50 +08:00
2026-10-05 17:30:45 +08:00
2026-10-05 17:30:45 +08:00
2026-09-21 16:25:35 +08:00
2026-09-28 14:16:11 +08:00
2026-10-04 00:17:21 +08:00
2026-10-01 19:19:58 +08:00
2026-09-28 14:16:11 +08:00
2026-09-29 00:47:54 +08:00
2026-09-28 14:16:11 +08:00
2026-10-05 17:30:45 +08:00
2026-09-28 14:16:11 +08:00
2026-10-03 17:18:13 +08:00
2026-09-28 14:16:11 +08:00
2026-10-05 17:30:44 +08:00
2026-10-01 19:19:58 +08:00
2026-10-01 19:19:58 +08:00
2026-09-28 14:16:11 +08:00
2026-09-28 14:16:11 +08:00
2026-10-01 19:19:58 +08:00
2026-09-28 14:16:11 +08:00
2026-09-30 13:35:14 +08:00
2026-10-02 15:23:12 +08:00
2026-09-29 06:37:40 +08:00