文档版本:v1.26 最后更新:2026-04-03 19:18:34
说明:
GET /cardsGET /homeGET /me/entry-homesummarystatusstatusCodetimeWindowctaTextisDefaultExperienceeventTypecurrentPresentationcurrentContentBundleplay.canLaunchcurrentPresentationcurrentContentBundle
这组已发布 release 语义cardEventIdseventIdstatus / canLaunch / currentPresentation / currentContentBundlecardEventIdsclickedEventIddetail.statusdetail.canLaunchF2B-013 的结构化日志,确认 manual 多赛道当前不显示赛道选择区的根因不在 frontend 展示层event-play.pageEventId = evt_demo_variant_manual_001event-play.variantCount = 0event-prepare.variantCount = 0event-prepare.selectableVariantCount = 0event-prepare.showVariantSelector = falseeventPublicID = evt_demo_variant_manual_001releaseId = rel_69d4778bdbb398b4payload_jsonb 当前缺少:
play.assignmentModeplay.courseVariantsBootstrap Demo 准备 manual demo source/build 时,会显式写入:
play.assignmentMode = manualplay.courseVariants = [variant_a, variant_b]GET /cardsGET /homeGET /me/entry-homesummarystatusstatusCodetimeWindowctaTextisDefaultExperienceeventTypecurrentPresentationcurrentContentBundlesummary 缺失时回退:当前暂无活动摘要timeWindow 缺失时回退:时间待公布ctaText 当前由 backend 派生:
进入体验进入活动查看回顾查看详情currentPresentation / currentContentBundle 继续表示当前已发布 release 摘要,不是 event 草稿默认值cards 落显式字段:is_default_experienceF2B-012 的反馈,正式收紧 play.canLaunch 和 POST /events/{eventPublicID}/launch 的前置条件play.canLaunch = true
status = activemanifestruntimepresentationcontent bundlecurrent published release is missing runtime bindingcurrent published release is missing presentation bindingcurrent published release is missing content bundle bindinglaunch 当前也已按同一套规则阻断,避免出现:play.canLaunch = falselaunch 仍能进局currentPresentation / currentContentBundle / runtime 任意缺失时,play.canLaunch 是否已变为 falseplay.reason 是否已返回更具体缺失原因canLaunch=false 时禁用进入动作reasoncurrentPresentationcurrentContentBundle
当前表示的是“当前已发布 release 上实际绑定的展示版本 / 内容包版本摘要”当前发布展示版本当前发布内容包版本play.canLaunchentry-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-setassignmentMode 现在是空字符串 \"\"variantId 为空时,runtimeCourseVariantId 仍可能有值,前端展示层不要把两者混为“用户选了赛道”occurredAt 和 receivedAt 会有轻微时钟漂移,排查顺序时建议增加前端本地递增序号assignmentMode = null 或不传variantId = null 或不传details.seqlaunchVariantIdruntimeCourseVariantIdentry-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-sequentialhome_primaryhome_secondarycard_demo_score_o_001 改为 home_primary98Bootstrap DemocardEventIdsevt_demo_score_o_001POST /dev/client-logsGET /dev/client-logsDELETE /dev/client-logs前端调试日志拉取前端日志清空前端日志sourcelevelcategorymessageeventIdreleaseIdsessionIdmanifestUrlroutedetails.schemaVersiondetails.playfield.kinddetails.game.modedetails.phaseBootstrap Demo 的一键按钮”,此前都会先把默认 demo 数据重新写回表单整条链一键验收看首页是否正常快速进一局发布活动配置(自动补 Runtime)Bootstrap Demo 后,会按当前已选中的 event 回填对应的 source / build / release / runtimeevt_demo_001Use Score-O Demo整条链一键验收eventPublicID = evt_demo_score_o_001game.mode = score-oplayfield.kind = control-setevt_demo_score_o_001 的正式 release manifestschemaVersion = 1playfield.kind = control-setgame.mode = score-oeventPublicID = evt_demo_score_o_001releaseId = rel_1c7601964d7f3d00manifestUrl = https://oss-mbh5.colormaprun.com/gotomars/event/releases/evt_demo_score_o_001/rel_1c7601964d7f3d00/manifest.json当前 Launch 实际配置摘要configUrlreleaseIdmanifestUrlschemaVersionplayfield.kindgame.modePOST /events/{eventPublicID}/launch 响应里的:
launch.config.configUrllaunch.resolvedRelease.manifestUrllaunch.config.releaseIdschemaVersionplayfield.kindgame.modePOST /auth/login/wechat-miniGET /me/entry-homeGET /events/{eventPublicID}/playPOST /events/{eventPublicID}/launchPOST /sessions/{sessionPublicID}/startPOST /sessions/{sessionPublicID}/finishGET /sessions/{sessionPublicID}/resulteventPublicID = evt_demo_001channelCode = mini-demochannelType = wechat_minilaunch 返回值为准launch.resolvedRelease.releaseIdlaunch.resolvedRelease.manifestUrllaunch.resolvedRelease.manifestChecksumSha256launch.config.configUrllaunch.config.configLabellaunch.config.releaseIdlaunch.config.routeCodelaunch.business.sessionIdlaunch.business.sessionTokenlaunch.business.sessionTokenExpiresAtplay.assignmentModeplay.courseVariants[]
idnamedescriptionrouteCodeselectablelaunch.variant.idlaunch.variant.namelaunch.variant.routeCodelaunch.variant.assignmentModesession / ongoing / recent / result 摘要中补:
variantIdvariantNamerouteCodevariantIdlaunch 返回最终绑定结果assignmentMode=manual 且前端暂时未传 variantIdGET /events/{eventPublicID}/playPOST /events/{eventPublicID}/launchGET /me/entry-homeGET /sessions/{sessionPublicID}GET /sessions/{sessionPublicID}/resultGET /me/resultsGET /me/sessionspresentation schemacontent manifestasset manifestexample.com 占位:GET /dev/demo-assets/presentations/{demoKey}GET /dev/demo-assets/content-manifests/{demoKey}Use Classic DemoUse Score-O DemoUse Manual Variant Demoevt_demo_001evt_demo_score_o_001evt_demo_variant_manual_001rel_demo_score_o_001score-o.jsonBootstrap Demo 会准备两条真实赛道输入:variant_a -> c01.kmlvariant_b -> c02.kmlBootstrap DemoBootstrap 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.jsonBootstrap Demoevt_demo_variant_manual_001 曾存在历史残留的 launched session,导致 play.primaryAction=continuePOST /dev/bootstrap-demolaunchedrunning
session 改成 cancelledBootstrap Demo一键标准回归回归结果汇总GET /events/{eventPublicID}/playPOST /events/{eventPublicID}/launchGET /sessions/{sessionPublicID}/resultGET /me/sessionsGET /me/resultsBootstrap Demo一键补齐 Runtime 并发布
作为联调回归入口placemap assettile releasecourse sourcecourse setcourse variantruntime bindingpresentationcontent bundlereleasepresentation importevent 默认 active 绑定publish 默认继承resolvedReleasebusinessvariantruntimepresentationcontentBundleGET /events/{eventPublicID} 返回:
currentPresentationcurrentContentBundleGET /events/{eventPublicID}/play 返回:
currentPresentationcurrentContentBundlePOST /events/{eventPublicID}/launch 返回:
launch.presentationlaunch.contentBundleresolvedReleasebusinessvariantruntimefinishedfailedcancelledevent/*.jsonmanifestUrlPOST /sessions/{sessionPublicID}/finish 且 status=cancelledsessionToken 在该场景允许继续用于 finish(cancelled)cancelled 和 failed 后都不会再作为 ongoingSession 返回finish(cancelled)start / finish 收口成幂等处理start:launched -> 推进到 runningrunning / 终态 -> 直接返回当前 sessionfinish:launch 当前关键字段为前端正式联调契约:resolvedRelease.manifestUrlresolvedRelease.releaseIdbusiness.sessionIdbusiness.sessionTokenbusiness.sessionTokenExpiresAtb2f.md 明确通知,再安排联调变更launched 和 running 会被识别为 ongoingcancelled、failed、finished 都不会再进入 ongoing/me/entry-home 与 /events/{eventPublicID}/play 当前都复用同一 ongoing 判定逻辑/me/results 当前只返回终态 session:finishedfailedcancelledidstatuseventIdeventNamereleaseIdconfigLabelrouteCodeeventPublicIDreleaseIdmanifestUrlpublish build 只写 DB、不上传 OSS 的问题eventPublicID = evt_demo_001releaseId = rel_e7dd953743c5c0d2manifestUrl = https://oss-mbh5.colormaprun.com/gotomars/event/releases/evt_demo_001/rel_e7dd953743c5c0d2/manifest.jsonPOST /dev/bootstrap-demoGET /dev/workbench/admin/maps/admin/playfields/admin/resource-packsevent 组装接口:/admin/events/admin/events/{eventPublicID}/sourceGET /admin/events/{eventPublicID}/pipelinePOST /admin/sources/{sourceID}/buildGET /admin/builds/{buildID}POST /admin/builds/{buildID}/publishrollback 接口:POST /admin/events/{eventPublicID}/rollbackmanual 多赛道 demo 活动:eventPublicID = evt_demo_variant_manual_001releaseId = rel_demo_variant_manual_001channelCode = mini-demochannelType = wechat_miniassignmentMode = manualcourseVariants = [variant_a, variant_b]variant_a
name = A 线routeCode = route-variant-avariant_b
name = B 线routeCode = route-variant-bPOST /dev/bootstrap-demo 自动准备variant_b 的 service 层回归验证launch 选定的 variantId 会稳定回流到:GET /me/entry-homeGET /sessions/{sessionPublicID}/resultGET /me/resultsplay.assignmentMode=manualplay.courseVariants=2launch.variant.id=variant_bentry-home recent.variantId=variant_bresult.session.variantId=variant_bresults[0].session.variantId=variant_blaunch 新增兼容字段:launch.runtimeruntimeBindingIdplaceIdmapIdtileReleaseIdcourseSetIdcourseVariantIdresolvedReleasebusinessvariantcurrentPresentation.templateKeycurrentPresentation.versioncurrentContentBundle.bundleTypecurrentContentBundle.versionlaunch.presentation.templateKeylaunch.presentation.versionlaunch.contentBundle.bundleTypelaunch.contentBundle.versionGET /events/{eventPublicID}GET /events/{eventPublicID}/playPOST /events/{eventPublicID}/launchresolvedReleasebusinessvariantruntimetemplateKey / version / bundleTypefinish(cancelled)failed / cancelled 后 ongoing 消失start / finish 不再打断主链play -> launch -> map loadB2F-015f2b.md 标具体接口和返回值