598 lines
16 KiB
Markdown
598 lines
16 KiB
Markdown
# B2T 协作清单
|
||
> 文档版本:v1.18
|
||
> 最后更新:2026-04-03 16:16:38
|
||
|
||
说明:
|
||
|
||
- 本文件由 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-028
|
||
|
||
- 时间:2026-04-03 16:16:38
|
||
- 谁提的:backend
|
||
- 当前事实:
|
||
- backend 已新增 dev 调试日志入口:
|
||
- `POST /dev/client-logs`
|
||
- `GET /dev/client-logs`
|
||
- `DELETE /dev/client-logs`
|
||
- workbench 已新增 `前端调试日志` 面板,用于直接查看 frontend 主动上报的关键事实
|
||
- 这套能力只服务联调排查,不替代正式生产日志体系
|
||
- 当前目标是把“截图 + 口头描述”进一步收口成结构化事实,便于 backend 直接定位前端消费链问题
|
||
- 需要对方确认什么:
|
||
- 无
|
||
- 是否已解决:是
|
||
|
||
### B2T-027
|
||
|
||
- 时间:2026-04-03 15:29:07
|
||
- 谁提的:backend
|
||
- 当前事实:
|
||
- backend 已在 workbench 新增:
|
||
- `当前 Launch 实际配置摘要`
|
||
- 该摘要由 backend 代读当前 launch 对应 manifest,用于统一显示:
|
||
- `configUrl`
|
||
- `releaseId`
|
||
- `manifestUrl`
|
||
- `schemaVersion`
|
||
- `playfield.kind`
|
||
- `game.mode`
|
||
- 该能力只用于联调排查,避免浏览器直接读取 OSS 时受跨域影响
|
||
- 正式客户端链路不变,仍应直接消费:
|
||
- `launch.config.configUrl`
|
||
- `launch.resolvedRelease.manifestUrl`
|
||
- 需要对方确认什么:
|
||
- 无
|
||
- 是否已解决:是
|
||
|
||
### B2T-026
|
||
|
||
- 时间:2026-04-03 14:37:00
|
||
- 谁提的:backend
|
||
- 当前事实:
|
||
- backend 已把当前两种核心玩法和 manual 多赛道都挂成显式 demo 入口:
|
||
- 顺序赛:`evt_demo_001`
|
||
- 积分赛:`evt_demo_score_o_001`
|
||
- 多赛道:`evt_demo_variant_manual_001`
|
||
- 其中积分赛入口已固定到远端发布配置:
|
||
- `https://oss-mbh5.colormaprun.com/gotomars/event/score-o.json`
|
||
- workbench 当前可直接切换三种玩法做标准联调
|
||
- 需要对方确认什么:
|
||
- 无
|
||
- 是否已解决:是
|
||
|
||
### 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-024
|
||
|
||
- 时间:2026-04-03 14:21:24
|
||
- 谁提的:backend
|
||
- 当前事实:
|
||
- backend 已按 [t2b.md](D:/dev/cmr-mini/t2b.md) v1.11 开始“真实输入替换第一刀”
|
||
- 当前已优先替换:
|
||
- 真实 KML / 赛道文件
|
||
- 真实地图资源 URL
|
||
- `Bootstrap Demo` 当前最小生产骨架已改用:
|
||
- `https://oss-mbh5.colormaprun.com/gotomars/kml/lxcb-001/10/c01.kml`
|
||
- `https://oss-mbh5.colormaprun.com/gotomars/map/lxcb-001/tiles/`
|
||
- `https://oss-mbh5.colormaprun.com/gotomars/map/lxcb-001/tiles/meta.json`
|
||
- 当前仍保持同一条标准联调入口,不新增新流程
|
||
- 需要对方确认什么:
|
||
- 无
|
||
- 是否已解决:是
|
||
|
||
### B2T-025
|
||
|
||
- 时间:2026-04-03 14:29:42
|
||
- 谁提的:backend
|
||
- 当前事实:
|
||
- backend 已继续推进“真实输入替换第一刀”的 manual 多赛道部分
|
||
- 当前 `Bootstrap Demo` 已为 demo course set 准备两条真实 KML 输入:
|
||
- `c01.kml`
|
||
- `c02.kml`
|
||
- 当前 manual 多赛道 demo 的说明已同步为:
|
||
- `variant_a -> c01.kml`
|
||
- `variant_b -> c02.kml`
|
||
- 当前仍沿用同一条标准联调入口,不新增新流程
|
||
- 需要对方确认什么:
|
||
- 无
|
||
- 是否已解决:是
|
||
|
||
### B2T-023
|
||
|
||
- 时间:2026-04-03 13:24:38
|
||
- 谁提的:backend
|
||
- 当前事实:
|
||
- backend 已把标准联调入口继续固化为一键回归流
|
||
- workbench 当前新增:
|
||
- `一键标准回归`
|
||
- `回归结果汇总`
|
||
- 这条链当前会在:
|
||
- `Bootstrap Demo`
|
||
- `一键补齐 Runtime 并发布`
|
||
之后,继续自动验证:
|
||
- `play`
|
||
- `launch`
|
||
- `result`
|
||
- `history`
|
||
- 回归汇总当前会直接显示:
|
||
- 分项通过/未通过
|
||
- `Session ID`
|
||
- 总判定
|
||
- 需要对方确认什么:
|
||
- 无
|
||
- 是否已解决:是
|
||
|
||
### B2T-021
|
||
|
||
- 时间:2026-04-03 13:18:42
|
||
- 谁提的:backend
|
||
- 当前事实:
|
||
- backend 已根据 [t2b.md](D:/dev/cmr-mini/t2b.md) v1.10 的最新口径,切入“联调标准化阶段”
|
||
- 当前 backend 主线不再是继续扩对象或扩 workbench 管理能力
|
||
- 当前统一收口为 3 个目标:
|
||
- 固化“一键测试”链路
|
||
- 固化详细日志口径
|
||
- 固化稳定测试数据
|
||
- 当前最推荐联调方式为:
|
||
- `Bootstrap Demo`
|
||
- `一键补齐 Runtime 并发布`
|
||
- 这条链当前已可从空白环境直接跑通,并可输出:
|
||
- 分步日志
|
||
- 真实错误
|
||
- stack
|
||
- 最后一次 curl
|
||
- 预期判定
|
||
- 需要对方确认什么:
|
||
- 无
|
||
- 是否已解决:是
|
||
|
||
### 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-022
|
||
|
||
- 时间:2026-04-03 13:18:42
|
||
- 谁提的:backend
|
||
- 当前事实:
|
||
- backend 当前已具备“一键测试环境”与最小生产骨架测试数据
|
||
- 后续联调阶段如要进一步贴近生产,只需要逐步替换以下 demo 输入:
|
||
- 地图资源 URL
|
||
- KML / 赛道文件
|
||
- ContentBundle manifest
|
||
- Presentation schema
|
||
- 当前不需要继续新增对象层级即可支撑联调
|
||
- 需要对方确认什么:
|
||
- 总控后续如需要更接近生产的真实测试输入,请直接指定优先级最高的一类资源
|
||
- 是否已解决:否
|
||
|
||
### 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 目录中的导入接口说明
|
||
- 需要对方确认什么:
|
||
- 无
|
||
- 是否已解决:是
|