推进活动列表第一刀与联调回归

This commit is contained in:
2026-04-03 19:33:16 +08:00
parent b09c21c814
commit 527b4c78a9
34 changed files with 3094 additions and 224 deletions

192
b2f.md
View File

@@ -1,6 +1,6 @@
# b2f
> 文档版本v1.19
> 最后更新2026-04-03 16:43:25
> 文档版本v1.26
> 最后更新2026-04-03 19:18:34
说明:
@@ -12,6 +12,177 @@
## 待确认
### B2F-038
- 时间2026-04-03 19:13:57
- 谁提的backend
- 当前事实:
- backend 已按“活动卡片列表最小产品化第一刀”补齐以下返回中的活动卡片最小摘要字段:
- `GET /cards`
- `GET /home`
- `GET /me/entry-home`
- 当前最小摘要字段为:
- `summary`
- `status`
- `statusCode`
- `timeWindow`
- `ctaText`
- `isDefaultExperience`
- `eventType`
- `currentPresentation`
- `currentContentBundle`
- backend 当前希望 frontend 这轮优先做的是:
- 活动列表页按这组字段完成最小接线
- 详情页继续沿用:
- `play.canLaunch`
- `currentPresentation`
- `currentContentBundle`
这组已发布 release 语义
- 联调时继续通过 frontend 调试日志回传以下事实:
- 列表页实际拿到的 `cardEventIds`
- 点击卡片后的 `eventId`
- 详情页实际显示的 `status / canLaunch / currentPresentation / currentContentBundle`
- 需要对方确认什么:
- frontend 请按这组字段完成活动卡片列表最小实现,并回写:
- 当前字段是否足够
- 列表页是否还缺必需字段
- 最新日志里是否已能稳定看到:
- `cardEventIds`
- `clickedEventId`
- `detail.status`
- `detail.canLaunch`
- 是否已解决:否
### B2F-037
- 时间2026-04-03 22:52:10
- 谁提的backend
- 当前事实:
- backend 已根据 frontend 在 `F2B-013` 的结构化日志,确认 manual 多赛道当前不显示赛道选择区的根因不在 frontend 展示层
- 当前 frontend 日志事实为:
- `event-play.pageEventId = evt_demo_variant_manual_001`
- `event-play.variantCount = 0`
- `event-prepare.variantCount = 0`
- `event-prepare.selectableVariantCount = 0`
- `event-prepare.showVariantSelector = false`
- backend 进一步核对当前数据库里的该活动当前发布 release
- `eventPublicID = evt_demo_variant_manual_001`
- `releaseId = rel_69d4778bdbb398b4`
- 该 release 的 `payload_jsonb` 当前缺少:
- `play.assignmentMode`
- `play.courseVariants`
- 根因是:
- manual demo 的 source/build 数据此前仍按单赛道顺序赛模板生成
- 导致后续 publish 出来的新 release 没把多赛道配置带进去
- backend 已修复:
- `Bootstrap Demo` 准备 manual demo source/build 时,会显式写入:
- `play.assignmentMode = manual`
- `play.courseVariants = [variant_a, variant_b]`
- 需要对方确认什么:
- 无,当前这条已通过本轮联调日志确认
- 是否已解决:是
### B2F-036
- 时间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`
- 当前口径固定如下:
- `summary` 缺失时回退:`当前暂无活动摘要`
- `timeWindow` 缺失时回退:`时间待公布`
- `ctaText` 当前由 backend 派生:
- 默认体验活动:`进入体验`
- 进行中:`进入活动`
- 已结束:`查看回顾`
- 其余:`查看详情`
- `currentPresentation / currentContentBundle` 继续表示当前已发布 release 摘要,不是 event 草稿默认值
- backend 已给 `cards` 落显式字段:
- `is_default_experience`
- 当前 demo 数据已标记:
- 顺序赛为默认体验活动
- 积分赛、多赛道为普通活动
- 需要对方确认什么:
- frontend 可按以上字段和降级规则开始活动卡片列表最小产品化第一刀
- frontend 请回写:
- 当前字段是否足够启动列表页最小实现
- 是否还缺列表页必需名称摘要
- 是否已解决:否
### B2F-035
- 时间2026-04-03 18:16:19
- 谁提的backend
- 当前事实:
- backend 已根据 frontend 在 `F2B-012` 的反馈,正式收紧 `play.canLaunch``POST /events/{eventPublicID}/launch` 的前置条件
- 当前规则已改为:
- 仅当当前 event 满足以下条件时,`play.canLaunch = true`
- event `status = active`
- 已存在当前发布 release
- 当前发布 release 有 `manifest`
- 当前发布 release 已绑定 `runtime`
- 当前发布 release 已绑定 `presentation`
- 当前发布 release 已绑定 `content bundle`
- 当前若缺任一项backend 会返回更明确原因,例如:
- `current published release is missing runtime binding`
- `current published release is missing presentation binding`
- `current published release is missing content bundle binding`
- `launch` 当前也已按同一套规则阻断,避免出现:
- `play.canLaunch = false`
- 但直接调用 `launch` 仍能进局
- 需要对方确认什么:
- frontend 请在 backend 重启后复验:
-`currentPresentation / currentContentBundle / runtime` 任意缺失时,`play.canLaunch` 是否已变为 `false`
- `play.reason` 是否已返回更具体缺失原因
- frontend 页面当前可继续沿用:
- `canLaunch=false` 时禁用进入动作
- 同时展示 backend 返回的 `reason`
- 是否已解决:否
### B2F-034
- 时间2026-04-03 18:05:19
- 谁提的backend
- 当前事实:
- backend 当前已确认一个需要 frontend 明确区分的语义:
- `currentPresentation`
- `currentContentBundle`
当前表示的是“当前已发布 release 上实际绑定的展示版本 / 内容包版本摘要”
- 它们当前不是:
- 活动草稿默认值
- event 默认绑定草稿态
- 这也解释了为什么:
- 后台未完成导入 + 默认绑定 + publish 之前,这两项可能为空
- 一旦跑过后台发布链,它们就会开始显示
- backend 当前正式规则也已明确:
- 玩家进入游戏必须基于“已发布 release”
- 不能基于未发布默认配置直接放行
- 需要对方确认什么:
- frontend 请按以下口径调整页面语义:
- 文案优先改成:
- `当前发布展示版本`
- `当前发布内容包版本`
- 玩家能否继续进入,优先只看:
- `play.canLaunch`
- 当这两项为空时,优先解释为:
- 当前发布 release 未绑定
- 或当前尚未发布
- 不要把它们展示成“活动默认配置已存在,只是未显示”
- 是否已解决:否
### B2F-032
- 时间2026-04-03 16:43:25
@@ -269,6 +440,23 @@
## 已确认
### B2F-033
- 时间2026-04-03 17:25:35
- 谁提的backend
- 当前事实:
- backend 已把玩法切换对应的联调资源补齐到 workbench
- `presentation schema`
- `content manifest`
- `asset manifest`
- 玩法切换现在会自动填真实 dev 资源地址,不再继续保留 `example.com` 占位:
- `GET /dev/demo-assets/presentations/{demoKey}`
- `GET /dev/demo-assets/content-manifests/{demoKey}`
- 当前联调样例文案也已统一成中文活动样例,便于 frontend 直接核对页面显示与日志事实
- 需要对方确认什么:
- frontend 如需核对当前玩法对应的展示/内容输入,可直接对照 workbench 当前表单值与上述两条 dev 资源地址
- 是否已解决:是
### B2F-027
- 时间2026-04-03 14:37:00