Files
cmr-mini/b2t.md

509 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# B2T 协作清单
> 文档版本v1.13
> 最后更新2026-04-03 13:24: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-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-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 目录中的导入接口说明
- 需要对方确认什么:
-
- 是否已解决:是