f2b.md 16 KB

F2B 协作清单

文档版本:v1.16 最后更新:2026-04-03 23:58:00

说明:

  • 本文件由前端维护,写给后端
  • 只写“事实”和“请求”
  • 不写长讨论稿
  • 每条尽量包含:时间、提出方、当前事实、需要对方确认什么、状态

待确认

F2B-014

  • 时间:2026-04-03 23:18:00
  • 提出方:前端
  • 当前事实:
    • backend 在 B2F-037 中已确认,本次“准备页没有赛道选择区”的直接原因不是前端显示条件,而是当前发布 release 的 payload_jsonb 缺少:
    • play.assignmentMode
    • play.courseVariants
    • backend 已说明修复方式为重新跑:
    • Bootstrap Demo
    • Use Manual Variant Demo
    • 发布活动配置(自动补 Runtime)整条链一键验收
    • 前端当前逻辑已经兼容:
    • 明确 assignmentMode=manual 时显示赛道选择区
    • 即使 assignmentMode 缺失,只要 courseVariants 中存在 2 条以上可选赛道,也会显示赛道选择区
    • 因此前端现在是否显示赛道选择区,取决于 backend 新发布的 release 是否真的回出了多赛道字段
  • 需要对方确认什么:
    • 该问题已由 backend 在 B2F-037 中确认修复完成,当前不再需要继续追问
    • 后续多赛道联调以修复后的 demo/publish 链为准
  • 状态:已确认

F2B-013

  • 时间:2026-04-03 22:28:00
  • 提出方:前端
  • 当前事实:
    • 手动多赛道活动当前已能进入准备页,但准备页仍未出现赛道选择区
    • 这次前端已排除“仅仅是 assignmentMode 没回 manual”这一种情况:
    • 当前前端兼容逻辑已放宽为:只要 courseVariants 中存在 2 条以上可选赛道,即使 assignmentMode 缺失,也会显示赛道选择区
    • 但当前实际页面仍显示:
    • 赛道模式:默认单赛道
    • 赛道摘要:当前未声明额外赛道版本,启动时按默认赛道进入
    • 这说明前端当前实际拿到的更像是:
    • play.courseVariants = [] 或未返回
    • 前端已追加准备页诊断日志字段,后端可从 event-prepare 日志直接核对:
    • details.variantCount
    • details.selectableVariantCount
    • details.showVariantSelector
  • 需要对方确认什么:
    • 该问题根因已由 backend 在 B2F-037 中定位完成,当前不再需要继续从前端显示层排查
    • 后续请转看 F2B-014
  • 状态:已解决

F2B-011

  • 时间:2026-04-03
  • 提出方:前端
  • 当前事实:
    • 使用 backend 一键测试环境联调 evt_demo_variant_manual_001 时,活动页 / 准备页返回:
    • primaryAction = continue
    • reason = user has an ongoing session for this event
    • 但前端本地当前没有可恢复快照,且本轮联调主观确认“已经没有需要恢复的游戏”
    • 当前看起来像是 backend 仍认定该用户在该活动下存在 ongoing session
  • 需要对方确认什么:
    • 请 backend 核对该用户在 evt_demo_variant_manual_001 下是否仍有 launched / running session 未清掉
    • 如这是预期行为,请说明推荐的标准清理路径;如不是预期,请修正 ongoing 判定或测试环境回收逻辑
  • 状态:待后续单独收口(当前不阻塞主线)

已确认

F2B-C001

  • 时间:2026-04-01
  • 提出方:前端
  • 当前事实:
    • 正式联调时,前端以 backend launch 下发的 release/manifest 为准
    • 不再回退到本地 event/*.json
  • 需要对方确认什么:
  • 状态:已确认

F2B-C002

  • 时间:2026-04-01
  • 提出方:前端
  • 当前事实:
    • 前后端协作文档改为双文件:
    • f2b.md 由前端维护
    • b2f.md 由后端维护
  • 需要对方确认什么:
  • 状态:已确认

F2B-C003

  • 时间:2026-04-02
  • 提出方:前端
  • 当前事实:
    • backend 已确认 session 三态正式语义:
    • 正常完成 -> finished
    • 超时或规则失败 -> failed
    • 主动退出 / 放弃恢复 -> cancelled
    • 前端已按这套语义继续联调
  • 需要对方确认什么:
  • 状态:已确认

F2B-C004

  • 时间:2026-04-02
  • 提出方:前端
  • 当前事实:
    • backend 已确认“放弃恢复”官方语义为 finish(cancelled)
    • sessionToken 在该场景下允许继续调用
    • 前端当前已正式启用该链路
  • 需要对方确认什么:
  • 状态:已确认

F2B-C005

  • 时间:2026-04-02
  • 提出方:前端
  • 当前事实:
    • backend 已确认 start / finish 按幂等处理
    • 前端可继续按当前补报 / 重试逻辑联调
  • 需要对方确认什么:
  • 状态:已确认

F2B-C006

  • 时间:2026-04-02
  • 提出方:前端
  • 当前事实:
    • backend 已确认多赛道第一阶段最小契约,且相关字段已可从以下接口返回:
    • /events/{eventPublicID}/play
    • /events/{eventPublicID}/launch
    • /me/entry-home
    • /sessions/{sessionPublicID}
    • /sessions/{sessionPublicID}/result
    • /me/results
    • /me/sessions
    • 正式口径为:
    • play.assignmentMode
    • play.courseVariants[]
    • launch.variant.id/name/routeCode/assignmentMode
    • session / ongoing / recent / result 摘要中带 variantId/variantName/routeCode
  • 需要对方确认什么:
  • 状态:已确认

F2B-C007

  • 时间:2026-04-02
  • 提出方:前端
  • 当前事实:
    • backend 已确认 launch 关键字段为正式契约:
    • resolvedRelease.manifestUrl
    • resolvedRelease.releaseId
    • business.sessionId
    • business.sessionToken
    • business.sessionTokenExpiresAt
    • 如后续字段名或层级需调整,backend 将先在 b2f.md 通知
  • 需要对方确认什么:
  • 状态:已确认

F2B-C008

  • 时间:2026-04-02
  • 提出方:前端
  • 当前事实:
    • backend 已确认 ongoing / recent / result 摘要口径:
    • launchedrunning 作为 ongoing
    • finishedfailedcancelled 不再作为 ongoing
    • /me/results 只返回终态对局
    • 前端后续按这套摘要口径做显示与回归
  • 需要对方确认什么:
  • 状态:已确认

F2B-C009

  • 时间:2026-04-03
  • 提出方:前端
  • 当前事实:
    • backend 已提供可联调的 manual 多赛道 demo 活动:
    • evt_demo_variant_manual_001
    • backend 已确认 launch 选定的 variantId 会稳定回流到:
    • /me/entry-home
    • /sessions/{sessionPublicID}/result
    • /me/results
  • 需要对方确认什么:
  • 状态:已确认

F2B-C010

  • 时间:2026-04-03
  • 提出方:前端
  • 当前事实:
    • backend 已透出活动运营域第二阶段摘要字段:
    • currentPresentation
    • currentContentBundle
    • launch.presentation
    • launch.contentBundle
    • 前端当前按总控口径,仅做类型 / adapter / 活动页与准备页轻摘要接线,不扩新页面链
  • 需要对方确认什么:
  • 状态:已确认

F2B-C011

  • 时间:2026-04-03 22:20:00
  • 提出方:前端
  • 当前事实:
    • backend 已通过 B2F-035 正式收紧 play.canLaunchlaunch 的前置条件
    • 当前规则为:缺 runtime / presentation / content bundle / manifest / 当前发布 release 任一项时,均不可进入游戏
    • 前端已按该契约复测,当前结果正常:
    • canLaunch=false 时页面会禁用进入动作
    • play.reason 会给出更具体的缺失原因
    • backend 也不会再允许直接 launch 绕过阻断
  • 需要对方确认什么:
  • 状态:已确认

F2B-C012

  • 时间:2026-04-03 23:52:00
  • 提出方:前端
  • 当前事实:
    • backend 已在 B2F-037 中确认:manual 多赛道准备页不显示选择区的根因是发布 release 缺少:
    • play.assignmentMode
    • play.courseVariants
    • backend 已修复 Bootstrap Demo 与发布链,当前问题已通过联调日志确认收口
    • frontend 当前已保留多赛道兜底展示逻辑,但该问题主因不在前端显示层
  • 需要对方确认什么:
  • 状态:已确认

F2B-C013

  • 时间:2026-04-03 23:52:00
  • 提出方:前端
  • 当前事实:
    • backend 在 B2F-038 中要求的活动卡片列表第一刀字段,frontend 当前已按最小方案接入:
    • summary
    • status
    • statusCode
    • timeWindow
    • ctaText
    • isDefaultExperience
    • eventType
    • currentPresentation
    • currentContentBundle
    • frontend 当前列表页和详情页日志也已补齐:
    • cardEventIds
    • clickedEventId
    • detailStatus
    • detailCanLaunch
    • detailCurrentPresentation
    • detailCurrentContentBundle
  • 需要对方确认什么:
    • 当前字段已足够支撑活动卡片列表最小实现
    • 当前没有发现必须新增的列表页名称摘要字段
  • 状态:已确认

阻塞

F2B-B001

  • 时间:2026-04-01
  • 提出方:前端
  • 当前事实:
    • 当前前端主链已基本可联调
    • 目前没有新的 backend 阻塞项
  • 需要对方确认什么:
  • 状态:已解决

已完成

F2B-D001

  • 时间:2026-04-01
  • 提出方:前端
  • 当前事实:
    • 小程序已接通:
    • 登录
    • 首页聚合
    • 活动页 play
    • launch -> 地图页
    • session start
    • session finish
    • session result
  • 需要对方确认什么:
  • 状态:已完成

F2B-D002

  • 时间:2026-04-01
  • 提出方:前端
  • 当前事实:
    • 小程序已接入故障恢复:
    • 检测未正常结束对局
    • 弹“继续恢复 / 放弃”
    • 继续恢复时恢复本地运行时快照
    • 放弃时清本地恢复,并上报 finish(cancelled)
  • 需要对方确认什么:
  • 状态:已完成

F2B-D003

  • 时间:2026-04-01
  • 提出方:前端
  • 当前事实:
    • evt_demo_001 当前 release manifest 已恢复可用
    • 前端已能正常进入地图
  • 需要对方确认什么:
  • 状态:已完成

F2B-D004

  • 时间:2026-04-02
  • 提出方:前端
  • 当前事实:
    • 前端已完成多赛道第一阶段接入:
    • backendApi / launchAdapter / GameLaunchEnvelope 已接入 variant 字段
    • 故障恢复会随 launchEnvelope 保留 variant 信息
    • 活动页、准备页、首页、单局结果页、历史结果页开始展示赛道版本信息
    • manual 模式下准备页已支持选择赛道并把 variantId 带入 launch
  • 需要对方确认什么:
  • 状态:已完成

F2B-D005

  • 时间:2026-04-03
  • 提出方:前端
  • 当前事实:
    • 前端已完成活动运营域摘要第一刀的轻接线:
    • 活动页开始展示 currentPresentation / currentContentBundle
    • 准备页开始展示活动运营摘要
    • launch.presentation / launch.contentBundle 已进入 GameLaunchEnvelope
    • 会话快照会随 launchEnvelope 一起保留这批摘要
  • 需要对方确认什么:
  • 状态:已完成

F2B-D006

  • 时间:2026-04-03
  • 提出方:前端
  • 当前事实:
    • 已按 backend B2F-028 的排查口径补充前端诊断链,当前地图信息面板/赛后结果里可直接查看:
    • launch.config.configUrl
    • launch.resolvedRelease.manifestUrl
    • launch.config.releaseId
    • launch.resolvedRelease.releaseId
    • 最终加载后的:
      • Schema版本
      • 场地类型(playfield.kind)
      • 模式编码(game.mode)
    • 当前只补了诊断与观测,没有改动正式 launch 主链
  • 需要对方确认什么:
  • 状态:已完成

F2B-D007

  • 时间:2026-04-03 16:26:37
  • 提出方:前端
  • 当前事实:
    • 已按 B2F-030 接入 backend POST /dev/client-logs
    • 当前关键阶段会主动上报最小调试日志:
    • entry-home
    • event-play
    • event-prepare
    • launch-diagnostic
    • runtime-compiler
    • session-recovery
    • 当前主日志字段已按 backend 建议最小口径回传:
    • source
    • level
    • category
    • message
    • eventId
    • releaseId
    • sessionId
    • manifestUrl
    • route
    • details.phase
    • details.schemaVersion
    • details.playfield.kind
    • details.game.mode
    • 模拟器日志不再作为当前联调主诊断口,保留地图内调试面板作为本地辅助能力
  • 需要对方确认什么:
  • 状态:已完成

F2B-D008

  • 时间:2026-04-03 16:45:26
  • 提出方:前端
  • 当前事实:
    • backend 已通过 B2F-031 明确确认:积分赛误进顺序赛的根因不是前端解析,而是首页卡片入口配置错误
    • 具体根因为:
    • 首页卡片查询此前只取 home_primary
    • 积分赛 demo 卡此前被种到 home_secondary
    • 前端首页因此根本拿不到 evt_demo_score_o_001
    • backend 已修复积分赛卡片入口配置
    • 前端当前无需再为该问题修改玩法解析或 manifest 消费逻辑
  • 需要对方确认什么:
  • 状态:已完成

F2B-D009

  • 时间:2026-04-03 16:45:26
  • 提出方:前端
  • 当前事实:
    • 已按 B2F-032 优化前端结构化调试日志口径:
    • 非多赛道玩法时,不再上报空字符串形式的 assignmentMode
    • 非手选赛道时,不再把空 variantId 伪装成已选赛道
    • 所有 client log 现在都会附带前端本地递增 details.seq
    • launchVariantIdruntimeCourseVariantId 已明确区分
  • 需要对方确认什么:
  • 状态:已完成

F2B-D010

  • 时间:2026-04-03 22:12:00
  • 提出方:前端
  • 当前事实:
    • 已按 B2F-034 对活动页和准备页做语义收口:
    • 展示版本 改成 当前发布展示版本
    • 内容包版本 改成 当前发布内容包版本
    • currentPresentation / currentContentBundle 为空时,前端当前统一解释为:
    • 当前发布 release 未绑定展示版本,或当前尚未发布
    • 当前发布 release 未绑定内容包版本,或当前尚未发布
    • 活动页与准备页当前进入动作都已优先受 play.canLaunch 控制:
    • canLaunch=false 时按钮禁用
    • 同时阻止继续进入准备页或地图
  • 需要对方确认什么:
  • 状态:已完成

下一步

F2B-N001

  • 时间:2026-04-02
  • 提出方:前端
  • 当前事实:
    • session 生命周期关键语义已由 backend 确认
    • 当前前端下一轮重点应转向主链回归与结果展示对齐
  • 需要对方确认什么:
  • 状态:前端执行中

F2B-N002

  • 时间:2026-04-02
  • 提出方:前端
  • 当前事实:
    • 心率 / 卡路里个体化能力已在前端预留
  • 需要对方确认什么:
    • 后续是否提供用户身体数据接口
  • 状态:后续事项

F2B-N003

  • 时间:2026-04-02
  • 提出方:前端
  • 当前事实:
    • backend 已确认多赛道第一阶段最小契约
    • 前端已完成第一阶段基础接入,下一步将转入多赛道专项联调与展示补强
  • 需要对方确认什么:
  • 状态:前端执行中

F2B-N004

  • 时间:2026-04-03
  • 提出方:前端
  • 当前事实:
    • 当前主链已进入“稳住 + 联调修复”阶段
    • 活动运营域摘要第一刀已接通,但前端不会主动扩复杂运营样式
  • 需要对方确认什么:
  • 状态:前端执行中

F2B-N005

  • 时间:2026-04-03
  • 提出方:前端
  • 当前事实:
    • 当前已具备积分赛 demo 发布链诊断信息,下一步将按 backend 一键测试环境回归 evt_demo_score_o_001
    • 如仍表现为顺序赛,前端将回传 launch/config/runtime 三段事实,不再只报“现象”
  • 需要对方确认什么:
  • 状态:前端执行中