b2t.md 20 KB

B2T 协作清单

文档版本:v1.22 最后更新:2026-04-03 19:21:23

说明:

  • 本文件由 backend 维护,写给总控线程
  • 只写事实和请求
  • 不写长讨论稿
  • 每条固定包含:时间、谁提的、当前事实、需要对方确认什么、是否已解决

待确认

B2T-009

  • 时间:2026-04-03 08:52:11
  • 谁提的:backend
  • 当前事实:
    • 总控线程在 t2b.md v1.1 中,已确认 backend 可按增量演进推进第一阶段生产骨架
    • backend 准备按已确认顺序开工:
    • Place
    • MapAsset
    • TileRelease
    • CourseSource
    • CourseSet
    • CourseVariant
    • MapRuntimeBinding
    • EventPresentationContentBundle 先保留对象语义,第二阶段补完整落库
  • 需要对方确认什么:
    • 无新的确认项;本条仅保留为“准备开工”记录
  • 是否已解决:是

已确认

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.sqlcards 落了显式字段:
    • 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 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 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 第 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
  • 需要对方确认什么:
  • 是否已解决:是

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 联调台接入
    • EventPresentationContentBundle 仍先在文档与接口边界保留语义
  • 需要对方确认什么:
  • 是否已解决:是

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