Files
Genarrative/packages/shared
suzmii 970dc8e65c
Project CI / AI game creator shell Rust lane 1/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust lane 2/2 (pull_request) Has been cancelled
Project CI / AI game creator shell Rust crates (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / AI game creator shell web tests (pull_request) Has been cancelled
feat(游戏共创): 衍生作品授权档位终态——禁止 PUT 修改(新可达码 FORK_AUTHORIZATION_INHERITED → 409)
漏洞:继承是「创建时快照等值」,而 PUT 只限方向不限对象 ⇒ 作者可把继承来的 `nonCommercial` 再提成 `full`,
得到比祖先更宽的子作品,把父作品仅在非商用授权下公开的工程内容变成可商用。裁定:衍生作品档位是终态。

- **服务端**:`set_game_distribution_fork_authorization_tx` 在**幂等重放之后、CAS 之前**先查血缘行
  (`game_distribution_lineage().game_id().find(...)`),衍生作品(有血缘行)**任何** PUT 都拒绝——含「传同值」
  这种幂等重试,客户端不会遇到「有时成功有时失败」的随机性;裁决集中到新纯函数
  `resolve_fork_authorization_promotion(has_lineage_row, current, expected, target)`(规则唯一实现,事务不再自己比
  CAS / 不再出现 `can_promote_to`)。
- **新稳定错误码**:`FORK_AUTHORIZATION_INHERITED` → **409**;模块 `Display` 产出 `"{CODE}: 衍生作品的共创授权由
  父作品继承,不能自行修改"`;api-server `FORK_` 映射登记;纳入 `fork_error_codes_are_reachable_from_module_messages`
  枚举(状态码 + 稳定码),并保留「未登记码退化成 FORK_ERROR」的反证。
- **母版不变**:只升不降(可跳级)+ CAS + 幂等重放 + 未知档位 400 + 非 owner 403 全部照旧。
- **无 schema/契约形状变更**(无列/表/索引/DTO 新字段)。
- **测试**:新增 5 组衍生矩阵(同值 / 再提一级 / 终态再传同值 / 期望值过期 / 期望值与当前都不符 → 全 409 + 稳定码)、
  母版提升与 CAS 语义回归、码前缀与可达性枚举扩展、以及「血缘行判定早于 CAS、事务不再自比 CAS」的结构断言。
  **Rust 侧原本没有任何「衍生 PUT 成功」的断言可改**(已 grep 核对:该路径此前只有 401/400 信封用例),未删除或
  弱化任何既有断言;断言旧语义的是 `scripts/check-game-distribution-lineage-e2e.mjs` 与
  `scripts/capture-game-lineage-visual.mjs`(属其它 owner,本轮未改,已在报告里点名需其把衍生提升步骤改成「必被拒」)。
- **文档**:技术方案 §2.3(母版 vs 衍生两档 + 状态机只发生在母版行)、§2.6 时序图、§3.3 状态表、§3.4(PUT 行、
  POST /games 行、lineage 行)、§3.9 新增「授权终态」补充与 §5.5 实施证据;并写明三件口径:**累计世代数由前端自算**
  (子树最大代际 − 本作品代际,根有 3 层后代则为 3;服务端不加字段)、**changeSummary 已在版本摘要 payload 上**
  (族谱面板只对选中节点查一次公开详情,不做 N+1、不给节点贴字段)、**衍生作品不会继承到 `forbidden`**
  (父为 forbidden 时不允许共创,根本产生不了衍生作品)。decision-log 追加 2026-10-06 决策条。

门禁:wasm build 0;`cargo check --all-targets` 0;`cargo test -p module-game-distribution` **134 passed**;
`cargo test -p spacetime-module` **305 passed / 1 ignored**;`cargo test -p spacetime-client` 43 passed;
`cargo test -p api-server game_distribution` 107 passed;`SPACETIME_SCHEMA_BASE_REF=9f4c7d76 npm run check:spacetime-schema`
0(98 表);DTO parity 0(66 组 / 17 构建器 / 15 手拼类型);`check:encoding` 0(5544 files);
`cargo fmt --all --manifest-path server-rs/Cargo.toml -- --check` 0;`git diff --check` 0。
2026-10-06 18:32:14 +08:00
..