完善活动运营域与联调标准化

This commit is contained in:
2026-04-03 13:11:41 +08:00
parent 0e28f70bad
commit 129ea935db
56 changed files with 11004 additions and 196 deletions

443
b2t.md Normal file
View File

@@ -0,0 +1,443 @@
# B2T 协作清单
> 文档版本v1.11
> 最后更新2026-04-03 13:04:32
说明:
- 本文件由 backend 维护,写给总控线程
- 只写事实和请求
- 不写长讨论稿
- 每条固定包含:时间、谁提的、当前事实、需要对方确认什么、是否已解决
---
## 待确认
### B2T-009
- 时间2026-04-03 08:52:11
- 谁提的backend
- 当前事实:
- 总控线程在 [t2b.md](D:/dev/cmr-mini/t2b.md) v1.1 中,已确认 backend 可按增量演进推进第一阶段生产骨架
- backend 准备按已确认顺序开工:
- `Place`
- `MapAsset`
- `TileRelease`
- `CourseSource`
- `CourseSet`
- `CourseVariant`
- `MapRuntimeBinding`
- `EventPresentation``ContentBundle` 先保留对象语义,第二阶段补完整落库
- 需要对方确认什么:
- 无新的确认项;本条仅保留为“准备开工”记录
- 是否已解决:是
---
## 已确认
### B2T-001
- 时间2026-04-03 08:52:11
- 谁提的backend
- 当前事实:
- 总控线程已确认 backend 采用增量演进方式推进
- 第一阶段不要求一次性推翻当前已稳定联调的:
- `Event`
- `EventRelease`
- `Session`
主链
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-002
- 时间2026-04-03 08:52:11
- 谁提的backend
- 当前事实:
- 总控线程已确认第一阶段优先落库对象顺序:
- `Place`
- `MapAsset`
- `TileRelease`
- `CourseSource`
- `CourseSet`
- `CourseVariant`
- `MapRuntimeBinding`
- backend 接受这条顺序,后续按此推进
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-003
- 时间2026-04-03 08:52:11
- 谁提的backend
- 当前事实:
- 总控线程已确认 `launch` 采用两阶段兼容
- 第一阶段保留当前稳定联调字段:
- `resolvedRelease`
- `business`
- `variant`
- 第二阶段再补完整运行对象字段:
- `placeId`
- `mapId`
- `tileReleaseId`
- `courseVariantId`
- `eventReleaseId`
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-004
- 时间2026-04-03 08:52:11
- 谁提的backend
- 当前事实:
- backend 认可总控线程的核心边界:
- 客户端最终只消费发布产物
- 不再直接消费原始 KML
- 不再直接消费地图原始资产
- 这与 backend 当前已稳定的:
- `EventRelease`
- `launch -> resolvedRelease`
- `session -> result`
主链一致
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-005
- 时间2026-04-03 08:52:11
- 谁提的backend
- 当前事实:
- backend 认可总控线程提出的两域拆分:
- 地图运行域
- 活动运营域
- `CourseVariant` 作为最终运行事实,也与当前多赛道第一阶段契约一致
- 需要对方确认什么:
-
- 是否已解决:是
---
## 阻塞
- 当前无新增阻塞
---
## 已完成
### B2T-019
- 时间2026-04-03 13:04:32
- 谁提的backend
- 当前事实:
- backend 已把当前联调环境补成“一键测试环境”
- `/dev/bootstrap-demo` 不再只准备:
- `tenant`
- `channel`
- `event`
- `release`
- `source`
- `build`
- `card`
- 现在还会一并准备并回填:
- `place`
- `map asset`
- `tile release`
- `course source`
- `course set`
- `course variant`
- `runtime binding`
- workbench 的:
- `Bootstrap Demo`
- `一键补齐 Runtime 并发布`
已可从空白状态直接跑完整测试链
- workbench 日志现在会输出:
- 分步执行日志
- 真实错误消息
- stack
- 最后一次 curl
- 最终预期判定
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-018
- 时间2026-04-03 12:36:15
- 谁提的backend
- 当前事实:
- backend 已完成“活动运营域第二阶段第四刀”最小实现
- 已新增:
- `POST /admin/events/{eventPublicID}/presentations/import`
- `POST /admin/events/{eventPublicID}/defaults`
- `events` 已新增默认 active 绑定列:
- `current_presentation_id`
- `current_content_bundle_id`
- `current_runtime_binding_id`
- `publish` 在未显式传入:
- `runtimeBindingId`
- `presentationId`
- `contentBundleId`
时,会优先继承 event 默认 active 绑定
- workbench 已补最小验证入口:
- `Import Presentation`
- `Save Event Defaults`
- `Publish Build` 空参继承验证
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-007
- 时间2026-04-03 08:52:11
- 谁提的backend
- 当前事实:
- backend 已具备当前稳定主链:
- 统一登录
- entry/home
- event play
- launch
- session start / finish
- result / history
- backend 已具备:
- 配置 source / build / release
- 最小后台资源对象
- 多赛道第一阶段最小契约
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-011
- 时间2026-04-03 09:09:07
- 谁提的backend
- 当前事实:
- backend 已开始第一阶段生产骨架实施
- `0008_production_skeleton.sql` 已落库到 `cmr20260401`
- 当前已新增并可用的后台生产接口覆盖:
- `Place`
- `MapAsset`
- `TileRelease`
- `CourseSource`
- `CourseSet`
- `CourseVariant`
- `MapRuntimeBinding`
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-012
- 时间2026-04-03 09:23:03
- 谁提的backend
- 当前事实:
- backend 已按 [t2b.md](D:/dev/cmr-mini/t2b.md) 第 5 步要求,把第一阶段生产骨架对象接入 `/dev/workbench`
- 当前联调台已覆盖:
- `Place`
- `MapAsset`
- `TileRelease`
- `CourseSource`
- `CourseSet`
- `CourseVariant`
- `MapRuntimeBinding`
- 当前 workbench 只做:
- `list`
- `create`
- `detail`
- `binding`
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-013
- 时间2026-04-03 09:27:18
- 谁提的backend
- 当前事实:
- backend 已整理第一阶段生产骨架最小操作顺序
- 当前推荐 workbench 联调路径为:
- `Place`
- `MapAsset`
- `TileRelease`
- `CourseSource`
- `CourseSet`
- `CourseVariant`
- `MapRuntimeBinding`
- 该顺序已写入 [开发说明.md](D:/dev/cmr-mini/backend/docs/开发说明.md)
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-015
- 时间2026-04-03 09:43:20
- 谁提的backend
- 当前事实:
- backend 已完成“第三刀最小接线”第一版:
- `MapRuntimeBinding -> EventRelease`
- `launch.runtime` 兼容新增
- 当前新增能力:
- `GET /admin/releases/{releasePublicID}`
- `POST /admin/releases/{releasePublicID}/runtime-binding`
- 当前 `launch` 在保持旧字段不变的前提下,新增:
- `launch.runtime.runtimeBindingId`
- `launch.runtime.placeId`
- `launch.runtime.mapId`
- `launch.runtime.tileReleaseId`
- `launch.runtime.courseSetId`
- `launch.runtime.courseVariantId`
- `/dev/workbench` 已补最小验证入口:
- `Get Release`
- `Bind Runtime`
- 需要对方确认什么:
-
- 是否已解决:是
---
## 下一步
### B2T-010
- 时间2026-04-03 08:52:11
- 谁提的backend
- 当前事实:
- backend 已完成第一阶段生产骨架落库、最小模型接线和 workbench 联调台接入
- `EventPresentation``ContentBundle` 仍先在文档与接口边界保留语义
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-014
- 时间2026-04-03 09:27:18
- 谁提的backend
- 当前事实:
- backend 下一步建议开始做“第一阶段对象与现有 Event/Release 的最小接线”
- 重点会围绕:
- `MapRuntimeBinding -> EventRelease`
- 运行对象如何逐步进入 `launch`
- 保持当前两阶段兼容不破坏前端稳定链
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-016
- 时间2026-04-03 09:43:20
- 谁提的backend
- 当前事实:
- 当前 release 与 runtime binding 的挂接已可单独验证
- 第四刀目标是把 `runtimeBindingId` 直接接进 publish 流,减少一次手工挂接
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-017
- 时间2026-04-03 10:46:00
- 谁提的backend
- 当前事实:
- backend 已完成第四刀第一版:
- `POST /admin/builds/{buildID}/publish` 支持可选 `runtimeBindingId`
- `POST /dev/config-builds/publish` 支持可选 `runtimeBindingId`
- 发布成功后返回 `runtime`
- `/dev/workbench` 发布区已支持直接填写 `Runtime Binding ID`
- 旧的“先 publish再 bind runtime”路径继续保留
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-018
- 时间2026-04-03 11:02:42
- 谁提的backend
- 当前事实:
- backend 已完成活动运营域第二阶段第一版:
- `0009_event_ops_phase2.sql` 已落库到 `cmr20260401`
- 新增:
- `event_presentations`
- `content_bundles`
- `event_releases` 已明确支持绑定:
- `presentation_id`
- `content_bundle_id`
- `runtime_binding_id`
- 当前新增后台接口:
- `GET/POST /admin/events/{eventPublicID}/presentations`
- `GET /admin/presentations/{presentationPublicID}`
- `GET/POST /admin/events/{eventPublicID}/content-bundles`
- `GET /admin/content-bundles/{contentBundlePublicID}`
- `publish` 当前已支持可选直接挂接:
- `runtimeBindingId`
- `presentationId`
- `contentBundleId`
- `/dev/workbench` 已补最小验证入口:
- `Create Presentation`
- `Create Bundle`
- 发布区填写 `Presentation ID / Content Bundle ID / Runtime Binding ID`
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-019
- 时间2026-04-03 11:22:50
- 谁提的backend
- 当前事实:
- backend 已完成“活动运营域第二阶段第二刀”第一版:
- `GET /events/{eventPublicID}` 透出:
- `currentPresentation`
- `currentContentBundle`
- `GET /events/{eventPublicID}/play` 透出:
- `currentPresentation`
- `currentContentBundle`
- `POST /events/{eventPublicID}/launch` 新增兼容摘要:
- `launch.presentation`
- `launch.contentBundle`
- `publish` 当前在未显式传入:
- `presentationId`
- `contentBundleId`
时,会优先按 event 当前默认的 active 配置自动补齐
- 旧字段和旧语义保持不变:
- `resolvedRelease`
- `business`
- `variant`
- `runtime`
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-020
- 时间2026-04-03 12:14:21
- 谁提的backend
- 当前事实:
- backend 已完成“活动运营域第二阶段第三刀”第一版:
- `event detail / play / launch / release detail` 已统一补齐活动运营摘要
- `presentation` 摘要当前最少带:
- `presentationId`
- `templateKey`
- `version`
- `contentBundle` 摘要当前最少带:
- `contentBundleId`
- `bundleType`
- `version`
- backend 已新增最小导入入口:
- `POST /admin/events/{eventPublicID}/content-bundles/import`
- 当前导入入口先只记录:
- `bundleType`
- `sourceType`
- `manifestUrl`
- `version`
- `assetManifest`
- `/dev/workbench` 已补:
- `Import Bundle`
- API 目录中的导入接口说明
- 需要对方确认什么:
-
- 是否已解决:是