Files
cmr-mini/b2t.md

716 lines
20 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.22
> 最后更新2026-04-03 19:21:23
说明:
- 本文件由 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-031
- 时间2026-04-03 19:21:23
- 谁提的backend
- 当前事实:
- frontend 本轮已通过结构化调试日志确认以下链路正常:
- 活动列表页当前能稳定拿到 3 张 demo 卡片
- 多赛道入口点击后能进入正确活动:
- `evt_demo_variant_manual_001`
- 多赛道详情当前已拿到:
- `assignmentMode = manual`
- `variantCount = 2`
- `detailCanLaunch = true`
- 当前发布 `presentation / content bundle` 摘要正常
- backend 当前可确认:
- manual 多赛道 demo 的当前发布 release 已切到正确版本
- 活动列表最小产品化第一刀与前端当前接线口径一致
- frontend 最新 `f2b.md` 当前也已将:
- `F2B-014`
标记为已确认
- 当前仍留一条未完全收口的旧项:
- `F2B-011`
- 即 demo 活动历史 ongoing session 回收口径,需要后续单独收掉
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-029
- 时间2026-04-03 22:34:08
- 谁提的backend
- 当前事实:
- backend 已按 `活动卡片列表最小产品化配合阶段` 落完第一刀最小摘要字段
- 当前以下返回已统一补齐活动卡片最小摘要:
- `GET /cards`
- `GET /home`
- `GET /me/entry-home`
- 当前摘要字段包括:
- `summary`
- `status`
- `statusCode`
- `timeWindow`
- `ctaText`
- `isDefaultExperience`
- `eventType`
- `currentPresentation`
- `currentContentBundle`
- 当前实现继续保持:
- 不新增对象层级
- 不改活动详情页现有语义
- `currentPresentation / currentContentBundle` 仍表示当前已发布 release 摘要
- backend 同时已通过 `0011_card_summary.sql``cards` 落了显式字段:
- `is_default_experience`
- 需要对方确认什么:
-
- 是否已解决:是
### 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-030
- 时间2026-04-03 19:08:55
- 谁提的backend
- 当前事实:
- backend 当前已完成并稳定运行的主线可概括为三段:
- 联调标准化阶段
- 真实输入替换第一刀
- 活动卡片列表最小产品化第一刀
- 联调标准化阶段当前已具备:
- 一键测试链
- 详细日志
- 稳定 demo 数据
- workbench 回归结果汇总
- frontend 调试日志通道
- 真实输入替换第一刀当前已完成:
- 真实 KML
- 真实地图 URL
- demo content manifest / presentation schema 通过 backend dev 资源入口提供
- 中文活动文案样例
- 活动卡片列表最小产品化第一刀当前已完成:
- `GET /cards`
- `GET /home`
- `GET /me/entry-home`
统一补齐活动卡片摘要字段
- 当前卡片最小摘要字段包括:
- `summary`
- `status`
- `statusCode`
- `timeWindow`
- `ctaText`
- `isDefaultExperience`
- `eventType`
- `currentPresentation`
- `currentContentBundle`
- 当前阶段 backend 仍保持:
- 不扩新对象层级
- 不推翻现有 `Event / EventRelease / Session`
- 继续以标准联调链为唯一基线
- 需要对方确认什么:
-
- 是否已解决:是
### B2T-029
- 时间2026-04-03 17:25:35
- 谁提的backend
- 当前事实:
- backend 已把“真实输入替换第一刀”继续推进到:
- `content manifest`
- `presentation schema`
- 中文活动文案样例
- 当前 workbench 的玩法切换会自动填充 backend 内置 demo 资源:
- `GET /dev/demo-assets/presentations/{demoKey}`
- `GET /dev/demo-assets/content-manifests/{demoKey}`
- 这两条路由只服务联调,不进入正式客户端运行链路
- `Bootstrap Demo` 当前准备的联调样例文案已统一为中文活动样例,不再继续暴露一批 `Demo ...` 名称
- 需要对方确认什么:
-
- 是否已解决:是
### 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 目录中的导入接口说明
- 需要对方确认什么:
-
- 是否已解决:是