补充发布面术语改名与作者侧权威版本号的共享记忆

记录 `lineage` → `network`、`forkSource` → `source` 改名落地(不动 DB schema 字段)与作者侧 `latestVersionNumber` 决策
记录统一发布摘要按权威 projectKey 归一、同号旧待审行作废、发布草稿配对放宽与复活即覆盖语义
This commit is contained in:
2026-10-08 12:22:51 +08:00
parent f1c864309b
commit 3df2b044e2
@@ -10035,3 +10035,12 @@ CI 上 `background_agent_runtime_recovers_stale_running_before_pending_task` 在
- schema:`game_distribution_version` 追加 `(game_id, version_number)` btree 索引(纯新增,不改字段)。
- 落地顺序:doc first(主规范 + 里程碑 + 实施计划)→ M1 类型改名与 ts-rs → M2 索引 → M3 api-server 路由收敛(新代码拆小文件)→ M4 客户端 → M5 收口。
- 落地回写(2026-10-07):api-server 路由与 DTO clean cut 已合入;AGC `publish_local_project_game` 按 `target_game_id` 选 `POST /games` 或 `POST /games/{game_id}/versions/{version_number}`,冻结资料回读、送审与发行包 / 工程源包分片续传统一改按号路径(`game_package_upload` 请求带 `game_id` + `version_number`);血缘与发布 DTO 的 ts-rs 迁移已合入并删除手写镜像;`forkAuthorization` 的两段式提升走派生幂等键 `{key}:fork` 与派生摘要 `(gameId, 提升前档位, 目标档位)`。
## 2026-10-07:发布面术语改名落地与作者侧权威版本号(提交 80a801c16 / bc32e0b7e / f1c864309)
- 术语改名落地:`GameDistributionGameSummary.lineage` → `network`、`GameDistributionSourceResponse.fork_source` → `source`(clean cut,无别名),同步 api-server 手拼键(`"lineage"`→`"network"`、`fn lineage_payload`→`fn network_payload`)、TS 契约与读取方、测试夹具、`check-game-distribution-dto-parity` 登记与文档;**不动** SpacetimeDB 生成绑定里的表字段 `lineage`(那是 DB schema)。
- 作者侧版本号:`GameDistributionOwnerGameSnapshot` 新增 `latest_version_number`(全部版本 `max(version_number)`,在作者视图 10 条截断之前取),贯通 generated bindings / `spacetime-client::GameDistributionOwnerGameRecord` / `owner_game_entry_payload` 的 `latestVersionNumber`;网页 `GamePublishPage` 与 AGC `resolve_owner_next_version_number` 都改为读它再 `+1`,不再用 `latestVersion`(按 `updated_at` 排序,不等于最大号)、也不再依赖被截断的 `versions` 列表。
- 统一发布幂等摘要:取 `publish_request_digest` 前把 `project_key` 归一到 `canonical_project_key`(作品行权威值,首次发布回退请求值),使 `POST /games` 与 `POST /games/{game_id}/versions/{n}` 对同一逻辑发布得到同一摘要(提交 `bc32e0b7e`)。
- 统一发布同号重发:插入新版本前先取消同 `(game_id, version_number)` 的 `pending_review` 旧行(与旧两步路径同口径),避免后台批准已被替代的内容。
- 发布草稿恢复:`isDraft` 不再要求 `gameId` / `versionId` 同时存在;更新模式请求前只冻结 `gameId` 是正常中间态,保留它才能在响应丢失后重载时用冻结的 `versionNumber` 重放(提交 `f1c864309`)。
- 复活语义(文档化,不改代码):软删作品同身份重发是**覆盖不是复原**,`created_at` 一并重置为本次发布时间,上一世代的资料 / 价格 / 指标 / 活动版本不可找回;意图写进 `revived_game_distribution_game_for_publish` 注释与实施计划。