完善联调标准化与诊断链路

This commit is contained in:
2026-04-03 17:01:04 +08:00
parent 114c524044
commit b09c21c814
35 changed files with 2677 additions and 175 deletions

220
b2f.md
View File

@@ -1,6 +1,6 @@
# b2f
> 文档版本v1.10
> 最后更新2026-04-03 20:10:25
> 文档版本v1.19
> 最后更新2026-04-03 16:43:25
说明:
@@ -12,6 +12,172 @@
## 待确认
### B2F-032
- 时间2026-04-03 16:43:25
- 谁提的backend
- 当前事实:
- backend 已收到 frontend 最新一轮结构化调试日志,并确认积分赛主链已打通
- 当前日志事实一致指向:
- `entry-home.cardEventIds` 已包含 `evt_demo_score_o_001`
- `event-play.pageEventId = evt_demo_score_o_001`
- `event-prepare.pageEventId = evt_demo_score_o_001`
- `launch.response.releaseId = rel_74bb47a0d0d3d252`
- `runtime-compiler.details.game.mode = score-o`
- `runtime-compiler.details.playfield.kind = control-set`
- 当前 backend 没再看到“明明选积分赛却实际跑成顺序赛”的问题
- 当前日志链还有 3 个口径优化项:
- 非多赛道玩法时,`assignmentMode` 现在是空字符串 `\"\"`
- `variantId` 为空时,`runtimeCourseVariantId` 仍可能有值,前端展示层不要把两者混为“用户选了赛道”
- `occurredAt``receivedAt` 会有轻微时钟漂移,排查顺序时建议增加前端本地递增序号
- 需要对方确认什么:
- frontend 后续日志上报请优化为:
- 非多赛道玩法时:
- `assignmentMode = null` 或不传
- `variantId = null` 或不传
- 新增:
- `details.seq`
- 如需展示赛道来源,请区分:
- `launchVariantId`
- `runtimeCourseVariantId`
- 是否已解决:否
### 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_001`
- `event-prepare.pageEventId = evt_demo_001`
- `launch.response.releaseId = rel_demo_001`
- `runtime-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`
- 是否已解决:否
### B2F-030
- 时间2026-04-03 16:16:38
- 谁提的backend
- 当前事实:
- backend 已新增 dev 调试接口:
- `POST /dev/client-logs`
- `GET /dev/client-logs`
- `DELETE /dev/client-logs`
- workbench 已新增:
- `前端调试日志`
- `拉取前端日志`
- `清空前端日志`
- 这套能力只用于联调,不参与正式生产日志链路
- backend 当前建议 frontend 在关键阶段主动上报日志,至少覆盖:
- launch 返回后
- 地图页拿到最终 manifest 后
- 运行时编译完成后
- 发现缓存命中 / 恢复 session / 模式不符时
- 需要对方确认什么:
- frontend 请按最小字段约定接入并回传一轮:
- `source`
- `level`
- `category`
- `message`
- `eventId`
- `releaseId`
- `sessionId`
- `manifestUrl`
- `route`
- `details.schemaVersion`
- `details.playfield.kind`
- `details.game.mode`
- `details.phase`
- 是否已解决:否
### 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`
- 需要对方确认什么:
- frontend 请重启 backend 后复验:
- `Use Score-O Demo`
- `整条链一键验收`
- 并确认地图信息面板里是否已切到:
- `eventPublicID = evt_demo_score_o_001`
- `game.mode = score-o`
- `playfield.kind = control-set`
- 是否已解决:否
### B2F-028
- 时间2026-04-03 15:29:07
- 谁提的backend
- 当前事实:
- backend 已核对积分赛 demo 当前发布链,以下 3 层结果一致:
- 本地源配置 [score-o.json](D:/dev/cmr-mini/event/score-o.json)
- OSS 配置 [score-o.json](https://oss-mbh5.colormaprun.com/gotomars/event/score-o.json)
- 当前 event `evt_demo_score_o_001` 的正式 release manifest
- 当前后端确认值为:
- `schemaVersion = 1`
- `playfield.kind = control-set`
- `game.mode = score-o`
- 当前积分赛正式 release 为:
- `eventPublicID = evt_demo_score_o_001`
- `releaseId = rel_1c7601964d7f3d00`
- `manifestUrl = 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并直接显示
- `configUrl`
- `releaseId`
- `manifestUrl`
- `schemaVersion`
- `playfield.kind`
- `game.mode`
- 这块摘要只用于联调排查,不参与正式客户端运行链路
- 需要对方确认什么:
- frontend 请先排查并回传这 4 项事实:
- `POST /events/{eventPublicID}/launch` 响应里的:
- `launch.config.configUrl`
- `launch.resolvedRelease.manifestUrl`
- `launch.config.releaseId`
- 地图页/运行时真正读取的最终 manifest URL
- 最终加载后的 manifest 摘要:
- `schemaVersion`
- `playfield.kind`
- `game.mode`
- 如仍表现为顺序赛,请同时给出:
- 控制台日志
- 网络请求日志
- 是否存在本地缓存/上次 session 恢复痕迹
- 是否已解决:否
### B2F-001
- 时间2026-04-01
@@ -103,6 +269,56 @@
## 已确认
### B2F-027
- 时间2026-04-03 14:37:00
- 谁提的backend
- 当前事实:
- workbench 已提供 3 个显式玩法测试入口:
- `Use Classic Demo`
- `Use Score-O Demo`
- `Use Manual Variant Demo`
- 对应联调 event 为:
- `evt_demo_001`
- `evt_demo_score_o_001`
- `evt_demo_variant_manual_001`
- 积分赛入口已固定到:
- `rel_demo_score_o_001`
- `score-o.json`
- 需要对方确认什么:
- frontend 后续若要测顺序赛或积分赛,优先使用上述显式入口,而不是自行猜 event/release
- 是否已解决:是
### B2F-026
- 时间2026-04-03 14:29:42
- 谁提的backend
- 当前事实:
- backend 已把 manual 多赛道 demo 的赛道输入切到真实 KML
- 当前 `Bootstrap Demo` 会准备两条真实赛道输入:
- `variant_a -> c01.kml`
- `variant_b -> c02.kml`
- 当前地图仍继续共用同一组真实 tiles / mapmeta这符合当前多赛道联调阶段的实际需要
- 需要对方确认什么:
- frontend 如需回归 manual 多赛道,请先重新执行一次 `Bootstrap Demo`
- 是否已解决:是
### 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.kml`
- `TileRelease.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`
- 是否已解决:是
### B2F-024
- 时间2026-04-03 20:10:25