# 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 目录中的导入接口说明 - 需要对方确认什么: - 无 - 是否已解决:是