From 49cbdd2395fdedf99b630929eaf1059425ebed3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Wed, 7 Oct 2026 23:16:21 +0800 Subject: [PATCH] =?UTF-8?q?docs(memory):=20=E8=AE=B0=E5=BD=95=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E9=9D=A2=20REST=20=E6=94=B6=E6=95=9B=E4=B8=8E=20versi?= =?UTF-8?q?onNumber=20=E5=AF=B9=E5=A4=96=E8=BA=AB=E4=BB=BD=E5=86=B3?= =?UTF-8?q?=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - decision-log 追加 2026-10-07 条目:ADR 决策、路由拓扑反转(POST /games + /games/{game_id}/versions/{version_number})、clean cut 删除清单。 - 记录 GitHub 术语改名与 DTO/记录类型改名、ts-rs 类型收敛、fork 字段可写位置、AGC 本地绑定与 projectKey 语义、新增 (game_id, version_number) 索引与落地顺序。 --- docs/project-memory/shared-memory/decision-log.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/project-memory/shared-memory/decision-log.md b/docs/project-memory/shared-memory/decision-log.md index 02da06b3c..b3ba85b4c 100644 --- a/docs/project-memory/shared-memory/decision-log.md +++ b/docs/project-memory/shared-memory/decision-log.md @@ -10023,3 +10023,14 @@ CI 上 `background_agent_runtime_recovers_stale_running_before_pending_task` 在 - 修复的功能缺口:统一发布事务此前不处理 `changeSummary`。现按血缘行判定衍生、对衍生作品失败关闭并落库,母版忽略;网页 `gamePublishSubmission` 与 AGC 原生发布都把该字段透传到 `POST /versions`。 - schema:`local_project_id` → `project_key` 是模块未上线前的硬切改名,继续按 `SPACETIME_SCHEMA_GUARD_ALLOW_BREAKING=1` 走窗口;rollback 为回退 M1/M2 提交。 - 验证:`cargo check --workspace --all-targets`;`cargo test -p module-game-distribution` / `-p spacetime-module game_distribution` / `-p api-server game_distribution`;AGC `cargo test -- game_fork`;`check:generated-bindings`、`check:game-distribution-dto-parity`、`check:spacetime-schema`、`check:encoding`、`git diff --check`、网页与 AGC 定向 vitest 全绿。 + +## 2026-10-07:发布面 REST 收敛——对外版本身份改为 versionNumber + +- 决策(ADR `docs/adr/【ADR】游戏分发版本以versionNumber为对外身份-2026-10-07.md`):对外(作者 / 公开)版本身份一律用客户端冻结的 `versionNumber`;`version_id`(`gamever_`)降为 SpacetimeDB 内部主键,只在后台族 `/admin/api/game-distribution/versions/{version_id}/…`、收据与媒体命名空间使用。 +- 路由拓扑反转上一节「单一路由 `POST /versions`」:新作品 + 首版 = `POST /api/game-distribution/games`(只强制 `projectKey`,`gameId` 由 `(owner, projectKey)` 确定性派生);加版本 = `POST /api/game-distribution/games/{game_id}/versions/{version_number}`;`GET/PATCH` 与 `package` / `source` / `submit` / `cancel` 子资源全部挂在同一 `{version_number}` 前缀下。 +- clean cut:删除统一 `POST /versions`、`POST /games/{game_id}/versions`、所有对外 `/versions/{version_id}…`、`/games/{game_id}/derived`、`PUT /games/{game_id}/fork-authorization` 与 `GameDistributionSetForkAuthorizationRequest`;不迁移、不兜底、不双跑,历史由 Git 保存。 +- 术语对齐 GitHub:`derived`→`forks`(直接子代)、`lineage`→`network`(整棵改编树)、`contribution`→`network/stats`、`fork-source`→`source`、`project-bundle`→版本级 `source`(可编辑工程源包);对应 DTO / 记录类型同步改名,不留旧名别名。 +- 类型收敛:能 ts-rs 生成的一律生成(`NewGameVersionRequest`、`GameDistributionPublishVersionResponse`、`GameDistributionForkMetadata`、`GameDistributionUpdateGameMetadataRequest`、`GameDistributionForksResponse`),删除手写镜像;只有字面量联合与 multipart 二进制 part 继续手写 / `ts(type=…)`。 +- `forkAuthorization` 并入通用 `PATCH /my-games/{game_id}`;`fork` 血缘声明只在 `POST /games` 写一次、之后不可改;`/forks` 只读;AGC 的远端 `gameId` 存在项目内 `.agent/manifest.json` 的 `publication` 绑定(按账号 + origin 隔离),`projectKey` 只做首次发布与丢绑定恢复的锚。 +- schema:`game_distribution_version` 追加 `(game_id, version_number)` btree 索引(纯新增,不改字段)。 +- 落地顺序:doc first(主规范 + 里程碑 + 实施计划)→ M1 类型改名与 ts-rs → M2 索引 → M3 api-server 路由收敛(新代码拆小文件)→ M4 客户端 → M5 收口。