24 KiB
24 KiB
b2f
文档版本:v1.19 最后更新:2026-04-03 16:43:25
说明:
- 只写事实和请求
- 每条固定包含:时间、谁提的、当前事实、需要对方确认什么、是否已解决
待确认
B2F-032
- 时间:2026-04-03 16:43:25
- 谁提的:backend
- 当前事实:
- backend 已收到 frontend 最新一轮结构化调试日志,并确认积分赛主链已打通
- 当前日志事实一致指向:
entry-home.cardEventIds已包含evt_demo_score_o_001event-play.pageEventId = evt_demo_score_o_001event-prepare.pageEventId = evt_demo_score_o_001launch.response.releaseId = rel_74bb47a0d0d3d252runtime-compiler.details.game.mode = score-oruntime-compiler.details.playfield.kind = control-set
- 当前 backend 没再看到“明明选积分赛却实际跑成顺序赛”的问题
- 当前日志链还有 3 个口径优化项:
- 非多赛道玩法时,
assignmentMode现在是空字符串\"\" variantId为空时,runtimeCourseVariantId仍可能有值,前端展示层不要把两者混为“用户选了赛道”occurredAt和receivedAt会有轻微时钟漂移,排查顺序时建议增加前端本地递增序号
- 非多赛道玩法时,
- 需要对方确认什么:
- frontend 后续日志上报请优化为:
- 非多赛道玩法时:
assignmentMode = null或不传variantId = null或不传
- 新增:
details.seq
- 如需展示赛道来源,请区分:
launchVariantIdruntimeCourseVariantId
- 非多赛道玩法时:
- frontend 后续日志上报请优化为:
- 是否已解决:否
B2F-031
- 时间:2026-04-03 16:37:41
- 谁提的:backend
- 当前事实:
- backend 已收到 frontend 新增的结构化调试日志
- 这批日志已经明确说明:本轮前端实际进入的是经典顺序赛,不是积分赛
- 关键事实如下:
entry-home.cardEventIds = [evt_demo_001, evt_demo_variant_manual_001]event-play.pageEventId = evt_demo_001event-prepare.pageEventId = evt_demo_001launch.response.releaseId = rel_demo_001runtime-compiler.details.game.mode = classic-sequential
- backend 已确认根因不是积分赛 release 缺失,而是 demo 首页卡片入口配置错误:
- 当前首页卡片查询只取
home_primary - score-o demo 卡此前被种到了
home_secondary - 所以前端首页根本拿不到积分赛入口
- 当前首页卡片查询只取
- backend 已修复:
card_demo_score_o_001改为home_primary- 同时把优先级调高到
98
- 需要对方确认什么:
- frontend 请在 backend 重启后重新执行:
Bootstrap Demo- 进入首页再看
cardEventIds
- 并确认首页卡片中是否已经出现:
evt_demo_score_o_001
- frontend 请在 backend 重启后重新执行:
- 是否已解决:否
B2F-030
- 时间:2026-04-03 16:16:38
- 谁提的:backend
- 当前事实:
- backend 已新增 dev 调试接口:
POST /dev/client-logsGET /dev/client-logsDELETE /dev/client-logs
- workbench 已新增:
前端调试日志拉取前端日志清空前端日志
- 这套能力只用于联调,不参与正式生产日志链路
- backend 当前建议 frontend 在关键阶段主动上报日志,至少覆盖:
- launch 返回后
- 地图页拿到最终 manifest 后
- 运行时编译完成后
- 发现缓存命中 / 恢复 session / 模式不符时
- backend 已新增 dev 调试接口:
- 需要对方确认什么:
- frontend 请按最小字段约定接入并回传一轮:
sourcelevelcategorymessageeventIdreleaseIdsessionIdmanifestUrlroutedetails.schemaVersiondetails.playfield.kinddetails.game.modedetails.phase
- frontend 请按最小字段约定接入并回传一轮:
- 是否已解决:否
B2F-029
- 时间:2026-04-03 15:44:32
- 谁提的:backend
- 当前事实:
- backend 已确认一个具体问题:
- 所有“带
Bootstrap Demo的一键按钮”,此前都会先把默认 demo 数据重新写回表单 - 这会把前面已经选好的积分赛入口再次冲回顺序赛默认链
- 所有“带
- 受影响的不只是:
整条链一键验收
- 还包括:
看首页是否正常快速进一局发布活动配置(自动补 Runtime)
- backend 已修复为:
- 这些一键流在调用
Bootstrap Demo后,会按当前已选中的event回填对应的source / build / release / runtime - 不再无条件回退到
evt_demo_001
- 这些一键流在调用
- backend 已确认一个具体问题:
- 需要对方确认什么:
- frontend 请重启 backend 后复验:
Use Score-O Demo整条链一键验收
- 并确认地图信息面板里是否已切到:
eventPublicID = evt_demo_score_o_001game.mode = score-oplayfield.kind = control-set
- frontend 请重启 backend 后复验:
- 是否已解决:否
B2F-028
- 时间:2026-04-03 15:29:07
- 谁提的:backend
- 当前事实:
- backend 已核对积分赛 demo 当前发布链,以下 3 层结果一致:
- 本地源配置 score-o.json
- OSS 配置 score-o.json
- 当前 event
evt_demo_score_o_001的正式 release manifest
- 当前后端确认值为:
schemaVersion = 1playfield.kind = control-setgame.mode = score-o
- 当前积分赛正式 release 为:
eventPublicID = evt_demo_score_o_001releaseId = rel_1c7601964d7f3d00manifestUrl = https://oss-mbh5.colormaprun.com/gotomars/event/releases/evt_demo_score_o_001/rel_1c7601964d7f3d00/manifest.json
- 如果 frontend 当前跑出来仍是顺序赛,优先怀疑“实际消费的不是当前 launch 返回的 manifest”,或“运行时仍走旧缓存/旧默认逻辑”
- backend 已在 workbench 新增:
当前 Launch 实际配置摘要
- 该摘要会由 backend 代读当前 launch 对应 manifest,并直接显示:
configUrlreleaseIdmanifestUrlschemaVersionplayfield.kindgame.mode
- 这块摘要只用于联调排查,不参与正式客户端运行链路
- backend 已核对积分赛 demo 当前发布链,以下 3 层结果一致:
- 需要对方确认什么:
- frontend 请先排查并回传这 4 项事实:
POST /events/{eventPublicID}/launch响应里的:launch.config.configUrllaunch.resolvedRelease.manifestUrllaunch.config.releaseId
- 地图页/运行时真正读取的最终 manifest URL
- 最终加载后的 manifest 摘要:
schemaVersionplayfield.kindgame.mode
- 如仍表现为顺序赛,请同时给出:
- 控制台日志
- 网络请求日志
- 是否存在本地缓存/上次 session 恢复痕迹
- frontend 请先排查并回传这 4 项事实:
- 是否已解决:否
B2F-001
- 时间:2026-04-01
- 谁提的:backend
- 当前事实:
- backend 当前主链已经可联调:
POST /auth/login/wechat-miniGET /me/entry-homeGET /events/{eventPublicID}/playPOST /events/{eventPublicID}/launchPOST /sessions/{sessionPublicID}/startPOST /sessions/{sessionPublicID}/finishGET /sessions/{sessionPublicID}/result
- 当前建议统一使用 demo 入口:
eventPublicID = evt_demo_001channelCode = mini-demochannelType = wechat_mini
- backend 当前主链已经可联调:
- 需要对方确认什么:
- frontend 是否按这组 demo 数据作为当前唯一联调入口
- 是否已解决:否
B2F-002
- 时间:2026-04-01
- 谁提的:backend
- 当前事实:
- 进入游戏的正式流程必须以
launch返回值为准 - backend 当前约定字段:
launch.resolvedRelease.releaseIdlaunch.resolvedRelease.manifestUrllaunch.resolvedRelease.manifestChecksumSha256launch.config.configUrllaunch.config.configLabellaunch.config.releaseIdlaunch.config.routeCodelaunch.business.sessionIdlaunch.business.sessionTokenlaunch.business.sessionTokenExpiresAt
- 进入游戏的正式流程必须以
- 需要对方确认什么:
- frontend 是否确认正式流程只消费上述字段,不再自行推断 release URL
- 是否已解决:否
B2F-015
- 时间:2026-04-02
- 谁提的:backend
- 当前事实:
- backend 已阅读前端多赛道文档:
- backend 认可第一阶段先做“最小契约”,不先做完整后台模型
- backend 当前建议的第一阶段正式口径为:
play.assignmentModeplay.courseVariants[]idnamedescriptionrouteCodeselectable
launch.variant.idlaunch.variant.namelaunch.variant.routeCodelaunch.variant.assignmentModesession / ongoing / recent / result摘要中补:variantIdvariantNamerouteCode
- backend 第一阶段实现目标仍然保持保守:
- 一个 session 只绑定一个最终
variantId launch返回最终绑定结果- 恢复链不重新分配 variant
- 一个 session 只绑定一个最终
- 当前兼容性约束:
- 如果
assignmentMode=manual且前端暂时未传variantId - backend 当前会先回退到首个可选 variant,避免旧主链直接被打断
- 如果
- backend 当前已完成第一阶段最小实现:
GET /events/{eventPublicID}/playPOST /events/{eventPublicID}/launchGET /me/entry-homeGET /sessions/{sessionPublicID}GET /sessions/{sessionPublicID}/resultGET /me/resultsGET /me/sessions- 上述链路已能携带第一阶段 variant 摘要字段
- 需要对方确认什么:
- frontend 可按这组字段开始第一阶段联调
- 是否已解决:是
已确认
B2F-027
- 时间:2026-04-03 14:37:00
- 谁提的:backend
- 当前事实:
- workbench 已提供 3 个显式玩法测试入口:
Use Classic DemoUse Score-O DemoUse Manual Variant Demo
- 对应联调 event 为:
evt_demo_001evt_demo_score_o_001evt_demo_variant_manual_001
- 积分赛入口已固定到:
rel_demo_score_o_001score-o.json
- workbench 已提供 3 个显式玩法测试入口:
- 需要对方确认什么:
- frontend 后续若要测顺序赛或积分赛,优先使用上述显式入口,而不是自行猜 event/release
- 是否已解决:是
B2F-026
- 时间:2026-04-03 14:29:42
- 谁提的:backend
- 当前事实:
- backend 已把 manual 多赛道 demo 的赛道输入切到真实 KML
- 当前
Bootstrap Demo会准备两条真实赛道输入:variant_a -> c01.kmlvariant_b -> c02.kml
- 当前地图仍继续共用同一组真实 tiles / mapmeta,这符合当前多赛道联调阶段的实际需要
- 需要对方确认什么:
- frontend 如需回归 manual 多赛道,请先重新执行一次
Bootstrap Demo
- frontend 如需回归 manual 多赛道,请先重新执行一次
- 是否已解决:是
B2F-025
- 时间:2026-04-03 14:21:24
- 谁提的:backend
- 当前事实:
- backend 已开始“真实输入替换第一刀”
- 当前
Bootstrap Demo不再给生产骨架使用example.com占位赛道/地图地址 - 当前已改成真实可访问输入:
CourseSource.fileUrl = https://oss-mbh5.colormaprun.com/gotomars/kml/lxcb-001/10/c01.kmlTileRelease.tileBaseUrl = https://oss-mbh5.colormaprun.com/gotomars/map/lxcb-001/tiles/TileRelease.metaUrl = https://oss-mbh5.colormaprun.com/gotomars/map/lxcb-001/tiles/meta.json
- 这批真实输入仍走同一条一键回归链,不要求 frontend 改联调方式
- 需要对方确认什么:
- frontend 如需复验真实输入,请重新执行一次
Bootstrap Demo
- frontend 如需复验真实输入,请重新执行一次
- 是否已解决:是
B2F-024
- 时间:2026-04-03 20:10:25
- 谁提的:backend
- 当前事实:
- backend 已确认
evt_demo_variant_manual_001曾存在历史残留的launchedsession,导致play.primaryAction=continue - backend 已把清理逻辑并入
POST /dev/bootstrap-demo - 现在每次准备 demo 数据时,都会自动把 demo event 下残留的:
launchedrunningsession 改成cancelled
- 这意味着前端后续再用标准测试链回归时,不需要手工清理旧 demo ongoing
- backend 已确认
- 需要对方确认什么:
- frontend 遇到这类“明明本地没有恢复快照,但后端仍返回 continue”的情况,优先先重新执行一次
Bootstrap Demo
- frontend 遇到这类“明明本地没有恢复快照,但后端仍返回 continue”的情况,优先先重新执行一次
- 是否已解决:是
B2F-023
- 时间:2026-04-03 13:24:38
- 谁提的:backend
- 当前事实:
- backend 已把标准联调回归收成一键流
- workbench 当前新增:
一键标准回归回归结果汇总
- 这条链会在标准发布链之后继续自动验证:
GET /events/{eventPublicID}/playPOST /events/{eventPublicID}/launchGET /sessions/{sessionPublicID}/resultGET /me/sessionsGET /me/results
- 回归结果会直接显示分项通过/未通过,不再要求 frontend 自己口头判断
- 需要对方确认什么:
- frontend 当前回归优先使用这条一键标准回归链
- 是否已解决:是
B2F-022
- 时间:2026-04-03 13:18:42
- 谁提的:backend
- 当前事实:
- backend 当前已进入“联调标准化阶段”
- 当前推荐 frontend 优先使用 workbench 的:
Bootstrap Demo一键补齐 Runtime 并发布作为联调回归入口
- backend 现在提供的不是零散 demo 文本,而是一套可重复创建的真实测试对象:
placemap assettile releasecourse sourcecourse setcourse variantruntime bindingpresentationcontent bundlerelease
- 如果联调失败,workbench 当前会直接给出:
- 分步日志
- 真实错误消息
- stack
- 最后一次 curl
- 预期判定
- 需要对方确认什么:
- frontend 回归时优先基于这条一键测试链,不再先手工拼测试数据
- 是否已解决:是
B2F-019
- 时间:2026-04-03 12:36:15
- 谁提的:backend
- 当前事实:
- backend 已完成活动运营域第二阶段第四刀的后台最小实现:
presentation importevent 默认 active 绑定publish默认继承
- 本刀没有改前端当前稳定消费字段语义:
resolvedReleasebusinessvariantruntimepresentationcontentBundle
- 这次新增能力主要影响后台运营链和发布默认行为,不要求 frontend 立即改接入
- backend 已完成活动运营域第二阶段第四刀的后台最小实现:
- 需要对方确认什么:
- 无
- 是否已解决:是
B2F-018
- 时间:2026-04-03 11:22:50
- 谁提的:backend
- 当前事实:
- backend 已进入活动运营域第二阶段第二刀
- 当前客户端可消费新增摘要:
GET /events/{eventPublicID}返回:currentPresentationcurrentContentBundle
GET /events/{eventPublicID}/play返回:currentPresentationcurrentContentBundle
POST /events/{eventPublicID}/launch返回:launch.presentationlaunch.contentBundle
- 当前字段只做摘要透出,不下发复杂 schema
- 当前旧字段保持完全兼容:
resolvedReleasebusinessvariantruntime
- 需要对方确认什么:
- frontend 后续如要消费活动运营域摘要,先以这些新增摘要字段为准
- 是否已解决:是
B2F-003
- 时间:2026-04-02
- 谁提的:backend
- 当前事实:
- backend 已确认 session 三态正式语义:
- 正常完成 ->
finished - 超时或规则失败 ->
failed - 主动退出 / 放弃恢复 ->
cancelled
- 正常完成 ->
- backend 已确认 session 三态正式语义:
- 需要对方确认什么:
- frontend 按这套语义继续联调
- 是否已解决:是
B2F-004
- 时间:2026-04-01
- 谁提的:backend
- 当前事实:
- 正式联调时不应回退到本地样例配置路径
- 不应直接读取根目录
event/*.json - 应只认 launch 返回的
manifestUrl
- 需要对方确认什么:
- 无
- 是否已解决:是
B2F-005
- 时间:2026-04-01
- 谁提的:backend
- 当前事实:
- 接口说明优先看 workbench 里的中文 API 列表
- 深入字段说明再看 接口清单
- 需要对方确认什么:
- 无
- 是否已解决:是
B2F-006
- 时间:2026-04-02
- 谁提的:backend
- 当前事实:
- backend 已确认“放弃恢复”官方语义为
POST /sessions/{sessionPublicID}/finish且status=cancelled - 同一局的旧
sessionToken在该场景允许继续用于finish(cancelled) cancelled和failed后都不会再作为ongoingSession返回
- backend 已确认“放弃恢复”官方语义为
- 需要对方确认什么:
- frontend 可正式把“放弃恢复”接到
finish(cancelled)
- frontend 可正式把“放弃恢复”接到
- 是否已解决:是
B2F-007
- 时间:2026-04-02
- 谁提的:backend
- 当前事实:
- backend 已把
start / finish收口成幂等处理 - 重复
start:launched-> 推进到runningrunning/ 终态 -> 直接返回当前 session
- 重复
finish:- 已终态 -> 直接返回当前 session / result
- backend 已把
- 需要对方确认什么:
- frontend 继续按当前补报 / 重试逻辑联调
- 是否已解决:是
B2F-016
- 时间:2026-04-02
- 谁提的:backend
- 当前事实:
- backend 已确认
launch当前关键字段为前端正式联调契约:resolvedRelease.manifestUrlresolvedRelease.releaseIdbusiness.sessionIdbusiness.sessionTokenbusiness.sessionTokenExpiresAt
- 当前阶段 backend 不会单边调整这些字段名或层级
- 如后续确需调整,backend 会先在
b2f.md明确通知,再安排联调变更
- backend 已确认
- 需要对方确认什么:
- frontend 继续按当前字段接入,不做额外推断
- 是否已解决:是
B2F-017
- 时间:2026-04-02
- 谁提的:backend
- 当前事实:
- backend 已完成对 ongoing 口径的代码回归确认
- 当前实现中:
- 只有
launched和running会被识别为 ongoing cancelled、failed、finished都不会再进入 ongoing
- 只有
/me/entry-home与/events/{eventPublicID}/play当前都复用同一 ongoing 判定逻辑/me/results当前只返回终态 session:finishedfailedcancelled
- 当前首页摘要、play 摘要、result 详情都会复用同一组 session 基础摘要字段:
idstatuseventIdeventNamereleaseIdconfigLabelrouteCode
- 需要对方确认什么:
- frontend 可以按这套 ongoing / result 口径继续回归
- 是否已解决:是
阻塞
B2F-008
- 时间:2026-04-01
- 谁提的:backend
- 当前事实:
- 如果 frontend 再出现 manifest 加载失败,backend 仅靠一句“加载失败”无法定位
- 需要对方确认什么:
- 如再出现此类问题,请一次性提供:
eventPublicIDreleaseIdmanifestUrl- 页面报错文案
- 控制台日志
- 网络请求日志
- 如再出现此类问题,请一次性提供:
- 是否已解决:否
已完成
B2F-009
- 时间:2026-04-01
- 谁提的:backend
- 当前事实:
- backend 已修复
publish build只写 DB、不上传 OSS 的问题 - 新发布的 demo release manifest 已可正常访问
- 当前可用 release:
eventPublicID = evt_demo_001releaseId = rel_e7dd953743c5c0d2manifestUrl = https://oss-mbh5.colormaprun.com/gotomars/event/releases/evt_demo_001/rel_e7dd953743c5c0d2/manifest.json
- backend 已修复
- 需要对方确认什么:
- 无
- 是否已解决:是
B2F-010
- 时间:2026-04-01
- 谁提的:backend
- 当前事实:
- backend workbench 已支持中文 API 列表
- 当前可用于日常联调:
POST /dev/bootstrap-demoGET /dev/workbench
- 需要对方确认什么:
- 无
- 是否已解决:是
B2F-011
- 时间:2026-04-02
- 谁提的:backend
- 当前事实:
- backend 已新增后台第一版资源对象接口:
/admin/maps/admin/playfields/admin/resource-packs
- backend 已新增后台
event组装接口:/admin/events/admin/events/{eventPublicID}/source
- 这批接口主要服务后续后台配置运营,不影响当前小程序主链联调
- backend 已新增后台第一版资源对象接口:
- 需要对方确认什么:
- 无
- 是否已解决:是
B2F-012
- 时间:2026-04-02
- 谁提的:backend
- 当前事实:
- backend 已补后台运营闭环接口:
GET /admin/events/{eventPublicID}/pipelinePOST /admin/sources/{sourceID}/buildGET /admin/builds/{buildID}POST /admin/builds/{buildID}/publish
- 当前后台侧已经可以完成:
- 资源对象录入
- event source 组装
- preview build
- publish release
- backend 已补后台运营闭环接口:
- 需要对方确认什么:
- 无
- 是否已解决:是
B2F-013
- 时间:2026-04-02
- 谁提的:backend
- 当前事实:
- backend 已补后台
rollback接口:POST /admin/events/{eventPublicID}/rollback
- 当前后台侧已具备完整最小闭环:
- 资源对象
- event source 组装
- build
- publish
- rollback
- backend 已补后台
- 需要对方确认什么:
- 无
- 是否已解决:是
B2F-018
- 时间:2026-04-02
- 谁提的:backend
- 当前事实:
- backend 已补一条可联调的
manual多赛道 demo 活动:eventPublicID = evt_demo_variant_manual_001releaseId = rel_demo_variant_manual_001channelCode = mini-demochannelType = wechat_mini
- 当前 demo 配置为:
assignmentMode = manualcourseVariants = [variant_a, variant_b]
- 当前两条可选赛道:
variant_aname = A 线routeCode = route-variant-a
variant_bname = B 线routeCode = route-variant-b
- 该活动已由
POST /dev/bootstrap-demo自动准备
- backend 已补一条可联调的
- 需要对方确认什么:
- 无
- 是否已解决:是
B2F-019
- 时间:2026-04-02
- 谁提的:backend
- 当前事实:
- backend 已完成
variant_b的 service 层回归验证 - 已确认从
launch选定的variantId会稳定回流到:GET /me/entry-homeGET /sessions/{sessionPublicID}/resultGET /me/results
- 实测链路为:
play.assignmentMode=manualplay.courseVariants=2launch.variant.id=variant_bentry-home recent.variantId=variant_bresult.session.variantId=variant_bresults[0].session.variantId=variant_b
- backend 已完成
- 需要对方确认什么:
- 无
- 是否已解决:是
B2F-020
- 时间:2026-04-03 09:43:20
- 谁提的:backend
- 当前事实:
- backend 已在保持旧字段不变的前提下,为
launch新增兼容字段:launch.runtime
- 当前最小字段包括:
runtimeBindingIdplaceIdmapIdtileReleaseIdcourseSetIdcourseVariantId
- 这是一组新增字段,不替代也不改变现有:
resolvedReleasebusinessvariant
- frontend 当前可以忽略该字段,也可以开始做观测和日志透出
- backend 已在保持旧字段不变的前提下,为
- 需要对方确认什么:
- 无
- 是否已解决:是
B2F-021
- 时间:2026-04-03 12:14:21
- 谁提的:backend
- 当前事实:
- backend 已完成活动运营域第二阶段第三刀第一版
- 当前活动运营摘要已统一补齐最小字段:
currentPresentation.templateKeycurrentPresentation.versioncurrentContentBundle.bundleTypecurrentContentBundle.versionlaunch.presentation.templateKeylaunch.presentation.versionlaunch.contentBundle.bundleTypelaunch.contentBundle.version
- 上述字段当前已在以下接口可用:
GET /events/{eventPublicID}GET /events/{eventPublicID}/playPOST /events/{eventPublicID}/launch
- 旧字段继续完全兼容:
resolvedReleasebusinessvariantruntime
- 需要对方确认什么:
- frontend 如果开始消费活动运营摘要细项,请优先读取新增的
templateKey / version / bundleType
- frontend 如果开始消费活动运营摘要细项,请优先读取新增的
- 是否已解决:是
下一步
B2F-014
- 时间:2026-04-02
- 谁提的:backend
- 当前事实:
- session P0 已完成一轮收口
- 当前最值得继续联调确认的是:
- 放弃恢复 ->
finish(cancelled) failed / cancelled后 ongoing 消失- 重复
start / finish不再打断主链
- 放弃恢复 ->
- 需要对方确认什么:
- frontend 当前优先配合:
- 用当前 demo release 回归
play -> launch -> map load - 回归“继续恢复 / 放弃恢复”两条路径
- 如确认进入多赛道第一阶段联调,请先回复
B2F-015 - 如发现状态口径不一致,直接在
f2b.md标具体接口和返回值
- 用当前 demo release 回归
- frontend 当前优先配合:
- 是否已解决:否