games-development-ai/contracts/play-loop/proof-obligations.v2.json
lili cbfd4d871b
Some checks failed
contract-gates / contract-gates (push) Has been cancelled
docs-gate / docs-gate (push) Has been cancelled
feat(acceptance): 闭合 playtest v3 与 A+ 可信消费链
固化 Match-3 生产者、视觉、音频与双 Judge 证据闭包。

将《山海行纪》r1.1 绑定新的不可变 release,并以生产预检现场核验 bundle、Registry/2 和 25 项 Writer 快照。

同步地图1平衡锁值、跨游戏回归修复、验收契约与 SoT 证据。
2026-07-28 20:16:13 -07:00

1432 lines
44 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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"
]
}
]
}
}
}