{ "schemaVersion": "proof-obligations/2", "registryVersion": "2026-07-15.v3", "eventContractVersion": "game-event/1", "description": "便宜档五个可信模板 profile 的玩法闭环义务。机械层只选择具备动作、动作后截图和版本化业务事件的有序候选;语义成立仍由独立 Judge 和 finalPostguard 复核。", "profiles": { "narrative.branching-story": { "id": "narrative.branching-story", "genre": "narrative", "templateRoute": "_template-story", "description": "分支叙事:作出有后果的选择,并抵达与路径一致的明确结局。", "obligations": [ { "id": "narrative.choice-selected", "title": "玩家作出有效选择", "description": "至少一次选择被游戏接受。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "choice", "title": "提交选择", "event": { "type": "narrative.choice-committed", "predicates": [ { "path": "/choiceId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "动作后画面显示选择已生效。" }, { "id": "narrative.choice-consequence", "title": "选择产生可见后果", "description": "选择必须改变后续节点或路径。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "consequence", "title": "选择改变节点", "event": { "type": "narrative.choice-committed", "predicates": [ { "op": "changed", "beforePath": "/node/before", "afterPath": "/node/after" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "截图显示新节点、属性变化或不同路径内容。" }, { "id": "narrative.ending-reached", "title": "抵达明确结局", "description": "必须进入带明确结果的结局页。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "ending", "title": "抵达结局", "event": { "type": "narrative.ending-reached", "predicates": [ { "path": "/endingId", "op": "exists" }, { "path": "/outcome", "op": "oneOf", "value": [ "win", "lose" ] } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "截图可读出结局标题或明确的故事结束状态。" }, { "id": "narrative.ending-branch-consistent", "title": "结局与已走分支一致", "description": "Judge 用选择与结局两个有序步骤核对路径一致性。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "choice", "title": "提交分支选择", "event": { "type": "narrative.choice-committed", "predicates": [ { "path": "/branchId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] }, { "stepId": "ending", "title": "抵达分支结局", "event": { "type": "narrative.ending-reached", "predicates": [ { "path": "/branchId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ], "sameValue": [ { "path": "/branchId", "stepIds": [ "choice", "ending" ] } ] }, "visualCheck": "结局文案与本局选择和事件路径没有矛盾。" }, { "id": "narrative.ending-gallery-visible", "title": "结局图鉴可见", "description": "brief 要求图鉴时,结局页必须显示解锁状态。", "defaultRequired": false, "evidence": { "sequence": [ { "stepId": "gallery", "title": "显示结局图鉴", "event": { "type": "narrative.gallery-updated", "predicates": [ { "path": "/unlockedCount", "op": "gt", "value": 0 } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "截图能看见图鉴及已解锁数量。" } ], "interactionOptionalRules": [], "briefOptionalRules": [ { "id": "narrative-ending-gallery", "description": "brief 提到多结局或结局图鉴时提升图鉴义务。", "when": { "anyKeywords": [ "多结局", "结局图鉴", "收集结局", "多个结局" ] }, "requireObligationIds": [ "narrative.ending-gallery-visible" ] } ] }, "trpg.dice-tower": { "id": "trpg.dice-tower", "genre": "trpg", "templateRoute": "_template-trpg", "description": "掷骰爬塔:进入战斗、完成真实结算、击杀并翻层;按 brief 覆盖升级闭环。", "obligations": [ { "id": "trpg.battle-entered", "title": "进入真实战斗", "description": "从菜单进入有敌我状态的战斗场景。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "battle", "title": "进入战斗", "event": { "type": "trpg.battle-entered", "predicates": [ { "path": "/enemyId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "截图同时显示玩家、敌人状态和可操作战斗控件。" }, { "id": "trpg.attack-resolved", "title": "一次攻防结算改变状态", "description": "攻击后敌我状态真实变化。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "combat", "title": "完成攻防结算", "event": { "type": "trpg.combat-resolved", "predicates": [ { "op": "changed", "beforePath": "/encounterState/before", "afterPath": "/encounterState/after" }, { "path": "/outcome", "op": "oneOf", "value": [ "success", "critical", "failure" ] }, { "path": "/heroHp", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "动作后至少一个战斗数值与动作前不同。" }, { "id": "trpg.enemy-killed", "title": "击杀至少一个敌人", "description": "出现明确敌人击败事件。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "kill", "title": "击败敌人", "event": { "type": "trpg.enemy-defeated", "predicates": [ { "path": "/enemyId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "截图显示敌人消失、击败提示或胜利状态。" }, { "id": "trpg.floor-advanced", "title": "击杀后翻到下一层", "description": "击杀必须在之后带来楼层增长。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "kill", "title": "击败敌人", "event": { "type": "trpg.enemy-defeated", "predicates": [ { "path": "/enemyId", "op": "exists" }, { "path": "/sourceFloorVisitId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] }, { "stepId": "next-floor", "title": "进入下一层", "event": { "type": "trpg.floor-entered", "predicates": [ { "op": "increased", "beforePath": "/floor/before", "afterPath": "/floor/after" }, { "path": "/sourceFloorVisitId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag", "wait" ] } ], "sameValue": [ { "path": "/sourceFloorVisitId", "stepIds": [ "kill", "next-floor" ] } ] }, "visualCheck": "截图中的层数或敌人已与击杀前不同。" }, { "id": "trpg.level-increased", "title": "角色等级提升", "description": "brief 只要求普通升级时,证明等级真实增长而不强制天赋选择。", "defaultRequired": false, "evidence": { "sequence": [ { "stepId": "level", "title": "等级提升", "event": { "type": "trpg.level-increased", "predicates": [ { "path": "/upgradeId", "op": "exists" }, { "op": "increased", "beforePath": "/level/before", "afterPath": "/level/after" } ] }, "allowedActionTypes": [ "tap", "key", "drag" ], "postScreenshotRequired": true } ] }, "visualCheck": "截图显示角色等级或能力数值提升。" }, { "id": "trpg.talent-selected", "title": "升级时成功选择天赋", "description": "brief 要求升级时选择可用天赋。", "defaultRequired": false, "evidence": { "sequence": [ { "stepId": "talent", "title": "选择天赋", "event": { "type": "trpg.talent-selected", "predicates": [ { "path": "/upgradeId", "op": "exists" }, { "path": "/talentId", "op": "exists" } ] }, "allowedActionTypes": [ "tap", "key", "drag" ], "postScreenshotRequired": true } ] }, "visualCheck": "截图显示已选天赋或能力变化。" }, { "id": "trpg.returned-after-upgrade", "title": "升级后返回下一层", "description": "同一次升级中等级增长、选择天赋并返回更高楼层。", "defaultRequired": false, "evidence": { "sequence": [ { "stepId": "level", "title": "等级提升", "event": { "type": "trpg.level-increased", "predicates": [ { "path": "/upgradeId", "op": "exists" }, { "op": "increased", "beforePath": "/level/before", "afterPath": "/level/after" } ] }, "allowedActionTypes": [ "tap", "key", "drag" ], "postScreenshotRequired": true }, { "stepId": "talent", "title": "选择天赋", "event": { "type": "trpg.talent-selected", "predicates": [ { "path": "/upgradeId", "op": "exists" }, { "path": "/talentId", "op": "exists" } ] }, "allowedActionTypes": [ "tap", "key", "drag" ], "postScreenshotRequired": true }, { "stepId": "next-floor", "title": "返回下一层战斗", "event": { "type": "trpg.floor-entered", "predicates": [ { "path": "/upgradeId", "op": "exists" }, { "op": "increased", "beforePath": "/floor/before", "afterPath": "/floor/after" } ] }, "allowedActionTypes": [ "tap", "key", "drag", "wait" ], "postScreenshotRequired": true } ], "sameValue": [ { "path": "/upgradeId", "stepIds": [ "level", "talent", "next-floor" ] } ] }, "visualCheck": "截图依次显示等级提升、已选天赋和下一层战斗,且不是停留在升级页。" } ], "interactionOptionalRules": [], "briefOptionalRules": [ { "id": "trpg-level-up", "description": "brief 只要求普通升级时提升等级增长义务。", "when": { "anyKeywords": [ "升级", "等级提升", "level up" ] }, "requireObligationIds": [ "trpg.level-increased" ] }, { "id": "trpg-talent-choice", "description": "brief 明确天赋或三选一时才提升天赋选择与返回战斗义务。", "when": { "anyKeywords": [ "天赋", "三选一", "talent" ] }, "requireObligationIds": [ "trpg.level-increased", "trpg.talent-selected", "trpg.returned-after-upgrade" ] } ] }, "heritage.ordered-craft": { "id": "heritage.ordered-craft", "genre": "heritage", "templateRoute": "_template-feiyi", "description": "有序工序制作:同一作品完整完成 3–12 道独立工序,再形成一致汇总和已评分成品。", "obligations": [ { "id": "heritage.ordered-craft-completed", "title": "完整工序产生已评分成品", "description": "同一作品的全部工序按 1..N 完成且每步有判定,随后汇总全部完成并产生成品与评分。", "defaultRequired": true, "evidence": { "orderedSeries": { "seriesId": "craft-step", "title": "逐道完成工序", "event": { "type": "heritage.step-completed", "predicates": [ { "path": "/workId", "op": "exists" }, { "path": "/stepId", "op": "exists" }, { "path": "/stepIndex", "op": "gte", "value": 1 }, { "path": "/totalSteps", "op": "gte", "value": 3 }, { "path": "/totalSteps", "op": "lte", "value": 12 }, { "path": "/judgement", "op": "exists" } ] }, "allowedActionTypes": [ "tap", "key", "drag" ], "postScreenshotRequired": true, "groupByPath": "/workId", "indexPath": "/stepIndex", "itemIdPath": "/stepId", "totalPath": "/totalSteps", "judgementPath": "/judgement", "minItems": 3, "maxItems": 12, "summary": { "stepId": "summary", "title": "确认全部工序完成", "event": { "type": "heritage.craft-completed", "predicates": [ { "path": "/workId", "op": "exists" }, { "path": "/totalSteps", "op": "gte", "value": 3 }, { "path": "/totalSteps", "op": "lte", "value": 12 }, { "path": "/orderedStepIds", "op": "exists" }, { "path": "/allStepsCompleted", "op": "equals", "value": true } ] }, "allowedActionTypes": [ "tap", "key", "drag" ], "postScreenshotRequired": true, "groupByPath": "/workId", "totalPath": "/totalSteps", "orderedItemIdsPath": "/orderedStepIds", "completedPath": "/allStepsCompleted" }, "terminal": { "stepId": "terminal", "title": "产生成品并评分", "event": { "type": "heritage.product-completed", "predicates": [ { "path": "/workId", "op": "exists" }, { "path": "/score", "op": "gte", "value": 0 }, { "path": "/works", "op": "gt", "value": 0 } ] }, "allowedActionTypes": [ "tap", "key", "drag" ], "postScreenshotRequired": true, "groupByPath": "/workId", "scorePath": "/score", "worksPath": "/works" } } }, "visualCheck": "逐步截图显示每道工序的可见判定;收尾截图显示全部工序完成、成品数量大于零且评分可读。" } ], "interactionOptionalRules": [], "briefOptionalRules": [] }, "puzzle.match-board": { "id": "puzzle.match-board", "genre": "puzzle", "templateRoute": "_template-puzzle", "description": "匹配盘面解谜:合法操作改变盘面,达成目标并记录关卡结果。", "obligations": [ { "id": "puzzle.legal-move", "title": "合法操作改变盘面", "description": "至少一次合法操作改变盘面。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "move", "title": "改变盘面", "event": { "type": "puzzle.move-applied", "predicates": [ { "op": "changed", "beforePath": "/boardHash/before", "afterPath": "/boardHash/after" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "动作前后盘面存在与操作一致的变化。" }, { "id": "puzzle.goal-state", "title": "最终盘面满足目标", "description": "最终盘面真实满足当前关卡目标。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "goal", "title": "达成目标", "event": { "type": "puzzle.goal-reached", "predicates": [ { "path": "/goalId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "Judge 按画面与规则核对目标成立。" }, { "id": "puzzle.level-completed", "title": "出现关卡完成事件", "description": "游戏明确确认当前关卡完成。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "complete", "title": "完成关卡", "event": { "type": "puzzle.level-completed", "predicates": [ { "path": "/level", "op": "gt", "value": 0 } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "截图显示通关、下一关或完成页。" }, { "id": "puzzle.result-recorded", "title": "记录通关成绩", "description": "通关后记录步数、星级、时间或得分。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "result", "title": "记录成绩", "event": { "type": "puzzle.level-completed", "predicates": [ { "path": "/result", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "截图能读出本关成绩且与事件一致。" }, { "id": "puzzle.match3-valid-swap", "title": "完成一次标准三消有效交换", "description": "仅在可信标准 Match-3 interaction binding 核验后,证明第二次点击同步提交交换并形成新三连。", "defaultRequired": false, "evidence": { "sequence": [ { "stepId": "swap-committed", "title": "提交交换", "event": { "type": "puzzle.swap-committed", "predicates": [ { "path": "/moveId", "op": "exists" }, { "op": "increased", "beforePath": "/boardRevisionBefore", "afterPath": "/boardRevisionAfter" } ] }, "postScreenshotRequired": true, "allowedActionTypes": ["tap"] }, { "stepId": "match-formed", "title": "形成新三连", "event": { "type": "puzzle.match-formed", "predicates": [ { "path": "/moveId", "op": "exists" }, { "path": "/matchedCount", "op": "gte", "value": 3 } ] }, "postScreenshotRequired": true, "allowedActionTypes": ["tap"] } ], "sameValue": [ { "path": "/moveId", "stepIds": ["swap-committed", "match-formed"] } ] }, "visualCheck": "第二次点击后的画面显示棋盘已结算,且与交换提交和新三连事件一致。" }, { "id": "puzzle.hint-shown", "title": "卡壳提示真实可用", "description": "brief 要求提示时,触发后出现可执行提示。", "defaultRequired": false, "evidence": { "sequence": [ { "stepId": "hint", "title": "显示提示", "event": { "type": "puzzle.hint-shown", "predicates": [ { "path": "/hintId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "截图显示具体提示或高亮动作。" }, { "id": "puzzle.next-level-entered", "title": "进入下一关", "description": "brief 要求递进时,完成后进入更高关卡。", "defaultRequired": false, "evidence": { "sequence": [ { "stepId": "complete", "title": "完成当前关", "event": { "type": "puzzle.level-completed", "predicates": [ { "path": "/level", "op": "gt", "value": 0 }, { "path": "/sourceLevelVisitId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] }, { "stepId": "next-level", "title": "进入下一关", "event": { "type": "puzzle.level-entered", "predicates": [ { "op": "increased", "beforePath": "/level/before", "afterPath": "/level/after" }, { "path": "/sourceLevelVisitId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag", "wait" ] } ], "sameValue": [ { "path": "/sourceLevelVisitId", "stepIds": [ "complete", "next-level" ] } ] }, "visualCheck": "截图显示关卡编号、规则或盘面复杂度增加。" } ], "interactionOptionalRules": [ { "id": "puzzle-match3-standard-swap", "description": "可信标准 Match-3 binding 提升一次有效交换义务。", "interactionProfileId": "match3.orthogonal-swap-v1", "requireObligationIds": ["puzzle.match3-valid-swap"] } ], "briefOptionalRules": [ { "id": "puzzle-hint", "description": "brief 提到卡壳提示时提升提示义务。", "when": { "anyKeywords": [ "卡壳", "提示", "hint" ] }, "requireObligationIds": [ "puzzle.hint-shown" ] }, { "id": "puzzle-progression", "description": "brief 提到逐关递进或下一关时提升递进义务。", "when": { "anyKeywords": [ "逐关递进", "多关", "下一关", "规则递进" ] }, "requireObligationIds": [ "puzzle.next-level-entered" ] } ] }, "sim-business.recipe-fulfillment": { "id": "sim-business.recipe-fulfillment", "genre": "sim-business", "templateRoute": "_template-shop", "description": "配方履约经营:读取订单、按单选择、成功交付、获得正营收并形成一致结算。", "obligations": [ { "id": "sim-business.order-read", "title": "读取一份有效订单", "description": "出现带配方要求的订单。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "order", "title": "读取订单", "event": { "type": "sim-business.order-presented", "predicates": [ { "path": "/orderId", "op": "exists" }, { "path": "/recipeId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag", "wait" ] } ] }, "visualCheck": "截图可读出当前订单的配方要求。" }, { "id": "sim-business.recipe-selected", "title": "按订单完成配方选择", "description": "选择事件包含订单和配方标识。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "recipe", "title": "选择配方", "event": { "type": "sim-business.recipe-selected", "predicates": [ { "path": "/orderId", "op": "exists" }, { "path": "/recipeId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "截图显示已选项,Judge 与订单画面核对一致。" }, { "id": "sim-business.delivery-succeeded", "title": "成功交付正确商品", "description": "订单、配方选择和成功交付按序发生。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "order", "title": "读取订单", "event": { "type": "sim-business.order-presented", "predicates": [ { "path": "/orderId", "op": "exists" }, { "path": "/recipeId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag", "wait" ] }, { "stepId": "recipe", "title": "选择配方", "event": { "type": "sim-business.recipe-selected", "predicates": [ { "path": "/orderId", "op": "exists" }, { "path": "/recipeId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] }, { "stepId": "serve", "title": "成功交付", "event": { "type": "sim-business.order-served", "predicates": [ { "path": "/orderId", "op": "exists" }, { "path": "/recipeId", "op": "exists" }, { "path": "/success", "op": "equals", "value": true } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ], "sameValue": [ { "path": "/orderId", "stepIds": [ "order", "recipe", "serve" ] }, { "path": "/recipeId", "stepIds": [ "order", "recipe", "serve" ] } ] }, "visualCheck": "截图显示顾客满意、订单完成或商品被接收。" }, { "id": "sim-business.revenue-positive", "title": "成功订单产生正营收", "description": "成功交付后产生正营收。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "revenue", "title": "获得正营收", "event": { "type": "sim-business.order-served", "predicates": [ { "path": "/revenueDelta", "op": "gt", "value": 0 } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "截图显示金额或成功订单数大于零。" }, { "id": "sim-business.settlement-consistent", "title": "结算与业务事件一致", "description": "成功交付后进入含正订单数与金额的结算,跨事件一致性由 Judge 核对。", "defaultRequired": true, "evidence": { "sequence": [ { "stepId": "serve", "title": "成功交付", "event": { "type": "sim-business.order-served", "predicates": [ { "path": "/success", "op": "equals", "value": true }, { "path": "/dayId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] }, { "stepId": "settlement", "title": "形成结算", "event": { "type": "sim-business.settlement-recorded", "predicates": [ { "path": "/served", "op": "gt", "value": 0 }, { "path": "/currency", "op": "gt", "value": 0 }, { "path": "/dayId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag", "wait" ] } ], "sameValue": [ { "path": "/dayId", "stepIds": [ "serve", "settlement" ] } ] }, "visualCheck": "结算截图的订单数和金额与业务事件账一致。" }, { "id": "sim-business.product-unlocked", "title": "收入解锁新品", "description": "brief 要求新品时出现可见解锁。", "defaultRequired": false, "evidence": { "sequence": [ { "stepId": "product", "title": "解锁新品", "event": { "type": "sim-business.product-unlocked", "predicates": [ { "path": "/productId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "截图显示新品从锁定变为可用。" }, { "id": "sim-business.equipment-unlocked", "title": "收入解锁自动设备", "description": "brief 要求设备时出现设备解锁。", "defaultRequired": false, "evidence": { "sequence": [ { "stepId": "equipment", "title": "解锁设备", "event": { "type": "sim-business.equipment-unlocked", "predicates": [ { "path": "/equipmentId", "op": "exists" } ] }, "postScreenshotRequired": true, "allowedActionTypes": [ "tap", "key", "drag" ] } ] }, "visualCheck": "截图显示自动设备已解锁或启用。" } ], "interactionOptionalRules": [], "briefOptionalRules": [ { "id": "sim-business-product-unlock", "description": "brief 提到新品解锁时提升新品义务。", "when": { "anyKeywords": [ "解锁新品", "新品", "新配方" ] }, "requireObligationIds": [ "sim-business.product-unlocked" ] }, { "id": "sim-business-equipment-unlock", "description": "brief 提到自动设备时提升设备义务。", "when": { "anyKeywords": [ "自动出杯", "自动设备", "设备升级" ] }, "requireObligationIds": [ "sim-business.equipment-unlocked" ] } ] } } }